ソフトウェアがメモリ マッピングを介して既存のサードパーティ ソフトウェアと通信できるようにしようとしています。他のソフトウェアによって作成されるメモリ マップ ファイルに構造体を書き込むように言われました。ファイルを開くことができ、正しく作成されていることは間違いありませんが、ファイルをマップしようとするとエラー 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 を受け取っています。