没有
<iostream.h>
,请考虑使用新的编译器!
您可以使用
wmain
以避免字符串转换。虽然您并不真正需要,也不需要创建文件。使用
INVALID_HANDLE_VALUE
而不是
hFile
#include <iostream>
#include "windows.h"
int wmain(int argc, wchar_t* argv[])
{
const int buflen = 1000;
wchar_t* mapName = L"MyMapName";
wchar_t* message = L"123\0";
HANDLE hFileMapping = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, buflen, mapName);
if (!hFileMapping)
{
printf("CreateFileMapping error %d\n", GetLastError());
return 1;
}
LPVOID buf = MapViewOfFile(hFileMapping, FILE_MAP_ALL_ACCESS, 0, 0, buflen);
if (!buf)
{
printf("MapViewOfFile error %d\n", GetLastError());
CloseHandle(hFileMapping);
return 1;
}
CopyMemory(buf, message, (wcslen(message) * sizeof(wchar_t)));
system("pause");//wait until another program reads this data
UnmapViewOfFile(buf);
CloseHandle(hFileMapping);
return 0;
}
如果使用真实的文件句柄而不是
无效的句柄值
则改用该方法(注意,
buflen
为零):
CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, mapName);
在另一个程序中:
int wmain()
{
const int buflen = 1000;
wchar_t* mapName = L"MyMapName";
HANDLE hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, mapName);
if (!hMapFile)
{
DWORD e = GetLastError();
printf("OpenFileMapping %d\n", e);//EDITED: this line was missing
return 1;
}
wchar_t* buf = (wchar_t*)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, buflen);
if (!pBuf)
{
DWORD e = GetLastError();
printf("MapViewOfFileerror %d\n", e);//EDITED: this line was missing
CloseHandle(hMapFile);
return 1;
}
wcout << buf << endl;
UnmapViewOfFile(buf);
CloseHandle(hMapFile);
return 0;
}