C ++의 공유 메모리에 어떻게 글을 쓰나요?
-
07-07-2019 - |
문제
공유 메모리에 쓰고 Win32 API의 파일에 내용을 버리고 싶습니다. 현재이 코드가 있습니다.
HANDLE hFile, hMapFile;
LPVOID lpMapAddress;
hFile = CreateFile("input.map",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
hMapFile = CreateFileMapping(hFile,
NULL,
PAGE_READWRITE,
0,
0,
TEXT("SharedObject"));
lpMapAddress = MapViewOfFile(hMapFile,
FILE_MAP_ALL_ACCESS,
0,
0,
0);
sprintf(MapViewOfFile, "<output 1>");
UnmapViewOfFile(lpMapAddress);
CloseHandle(hFile);
CloseHandle(hMapFile);
그러나 31 행 (Sprintf 호출)은 오류를 나타냅니다.
error: cannot convert `void*(*)(void*, DWORD, DWORD, DWORD, DWORD)'
to `char*' for argument `1' to `int sprintf(char*, const char*, ...)'
LPMAPADDRESS를 LPTSTR로 캐스팅하려고 시도했지만 효과가 없습니다. 내가 뭘 잘못하고 있죠? 아니면 더 좋은 방법이 있습니까?
해결책
에서
sprintf(MapViewOfFile, "<output 1>");
라인, 당신은 원했습니다 lpMapAddress
, 아니다 MapViewOfFile
. 또는 (char*)lpMapAddress
정확합니다.
다른 팁
당신은 일반 파일에 쓰려고합니다. 공유 메모리에 글을 쓰려면 통과해야합니다 INVALID_HANDLE_VALUE
에게 CreateFileMapping
. 체크 아웃 이것 자세한 내용은 기사.
TCHAR szName[]=TEXT("Global\\MyFileMappingObject");
HANDLE hMapFile;
PVOID pBuf;
const DWORD BUF_SIZE = 256;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // max. object size
BUF_SIZE, // buffer size
szName); // name of mapping object
pBuf = MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
BUF_SIZE);
TCHAR szMsg[]=TEXT("<output 1>");
CopyMemory(pBuf, szMsg, (_tcslen(szMsg) * sizeof(TCHAR)));
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
sprintf에서 당신은 함수 mapviewoffile의 주소를 전달합니다. 대신 매핑 된 메모리 주소를 전달해야합니다.
"더 좋은 방법이 있습니까?" boost.interprocess,, 메모리 매핑 섹션 특히.
제휴하지 않습니다 StackOverflow