#include <stdio.h>
#include <Windows.h>
#define SHAREMEMNAME "ZSShareMem"
int main()
{
DWORD err;
HANDLE hShareMem = INVALID_HANDLE_VALUE;
char *address;
int *p;
hShareMem = CreateFileMapping(INVALID_HANDLE_VALUE,NULL,PAGE_READWRITE,0,1024,SHAREMEMNAME); //創建共享內存
if (hShareMem == INVALID_HANDLE_VALUE || hShareMem == NULL) //判斷是否出錯
{
printf("共享內存創建失敗\n");
return 0;
}
address = (char *)MapViewOfFile(hShareMem,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0); //將共享內存映射到當前進程地址空間
memset(address,0,1024);
sprintf(address,"1");
printf("%s\n",address);
p = (int *)MapViewOfFile(hShareMem,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
*p = 247;
printf("%d\n",p[0]);
p[1] = 36;
printf("%d\n",p[1]);
getchar();
return 0;
}
MapViewOfFile函數
功能:將一個文件映射對象映射到當前應用程序的地址空間
原型:
LPVOID WINAPI MapViewOfFile(
__in HANDLE hFileMappingObject, //文件映射對象的句柄
__in DWORD dwDesiredAccess, //訪問方式
__in DWORD dwFileOffsetHigh, //文件中映射起點的高32位地址
__in DWORD dwFileOffsetLow, //文件中映射起點的低32位地址
__in SIZE_T dwNumberOfBytesToMap //文件中要映射的字節數
);
訪問方式的取值:
FILE_MAP_WRITE映射可讀可寫。文件映射對象必須通過PAGE_READWRITE訪問創建。
FILE_MAP_READ 映射只讀。文件映射對象必須通過PAGE_READ 或 PAGE_READWRITE訪問創建。
FILE_MAP_ALL_ACCESS 與FILE_MAP_WRITE相同。
FILE_MAP_COPY 映射時保留寫操作的副本。文件映射對象必須用PAGE_WRITECOPY訪問在win95下創建
返回值:
如果成功,則返回映射視圖文件的開始地址值。
如果失敗,則返回 NULL.可調用GetLastError()查看錯誤。