我试图让我的软件通过内存映射与预先存在的第三方软件进行通信。我被告知将结构写入由其他软件创建的内存映射文件。我设法打开了该文件,并且它肯定是正确创建的,但是当我尝试映射文件时出现错误 8 (ERROR_NOT_ENOUGH_MEMORY)。
#include "stdafx.h"
#include <Windows.h>
struct MMFSTRUCT
{
unsigned char flags;
DWORD packetTime;
float telemetryMatrix[16];
float velocity[3];
float accel[3];
};
int _tmain(int argc, _TCHAR* argv[])
{
DWORD Time = 0;
HANDLE hMapFile;
void* pBuf;
TCHAR szName[]=TEXT("$FILE$");
hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS, // read/write access
FALSE, // do not inherit the name
szName); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not open file mapping object (%d).\n"),
GetLastError());
return 1;
}
while(true)
{
pBuf = MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_WRITE, // read/write permission
0,
0,
0);
if (pBuf == NULL)
{
_tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());
CloseHandle(hMapFile);
return 1;
}
MMFSTRUCT test_data;
// define variables here
CopyMemory(pBuf, &test_data, sizeof(MMFSTRUCT));
}
// etc
return 0;
}
MSDN 说,如果创建共享内存的程序未将共享内存设置为增长,则可能会发生这种情况,我应该尝试使用这些函数来设置指针大小:
SetFilePointer(hMapFile, sizeof(MMFSTRUCT) , NULL, FILE_CURRENT);
SetEndOfFile(hMapFile);
但我仍然收到错误 8,任何帮助将不胜感激,谢谢。