문제

공유 메모리에 쓰고 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,, 메모리 매핑 섹션 특히.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top