說(shuō)明
這里包含兩個(gè)程序,名字可看文章標(biāo)題和瀏覽器標(biāo)題
第一個(gè)代碼是第一個(gè)參數(shù)的,第二個(gè)代碼是第二個(gè)程序的
效果圖示兩個(gè)程序先后執(zhí)行的效果,先執(zhí)行程序一,再執(zhí)行程序二
效果

源碼
#include
#include
#include
#define BUF_SIZE 256
LPTSTR szName = TEXT("SharedFileMappingObject");
LPTSTR szMsg = TEXT("這是另一個(gè)進(jìn)程的信息");
int main(int argc, PCHAR argv[]){
HANDLE hMapFile;//文件映射句柄
LPTSTR pBuf;//共享數(shù)據(jù)緩沖區(qū)指針
//創(chuàng)建命名的文件映射,不代表硬盤(pán)上的文件
hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, BUF_SIZE, szName);
if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE){
printf("創(chuàng)建文件映射錯(cuò)誤: %d\n", GetLastError());
return 1;
}
//創(chuàng)建視圖
pBuf = (LPTSTR)MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
if (pBuf == NULL){
printf("創(chuàng)建文件映射視圖錯(cuò)誤: %d\n", GetLastError());
return 2;
}
//將共享數(shù)據(jù)賦值到文件映射中,如果允許時(shí)輸入了參數(shù)則使用參數(shù)
if (argc == 1){
CopyMemory((PVOID)pBuf, szMsg, strlen(szMsg));
} else{
DWORD dwCopyLen = (strlen(argv[1])< BUF_SIZE) ? strlen(argv[1]) : BUF_SIZE;
CopyMemory((PVOID)pBuf, argv[1], dwCopyLen);
}
printf("運(yùn)行程序,完成運(yùn)行后,按任意鍵退出\n");
getchar();
//取消映射,退出
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
}
源碼
#include
#include
#define BUF_SIZE 256
TCHAR szName[] = TEXT("SharedFileMappingObject");//映射的名字要正確
int main(int argc, PCHAR argv[]){
HANDLE hMapFile;//映射對(duì)象句柄
LPTSTR pBuf;//字符串緩存指針
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, szName);//打開(kāi)文件映射對(duì)象
if (hMapFile == NULL){
printf("打開(kāi)文件映射失敗: %d\n", GetLastError());
return 1;
}
//映射
pBuf = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, BUF_SIZE);
if (pBuf == NULL){
printf("文件映射視圖錯(cuò)誤: %d\n", GetLastError());
return 2;
}
//彈出得到的共享數(shù)據(jù)
MessageBox(NULL, pBuf, TEXT("映射內(nèi)容為"), MB_OK);
//取消映射,退出
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
}