leothink

ShareMemory的用法

[转自:http://tw.myblog.yahoo.com/noah_cjliao/article?mid=18&prev=-1&next=17


使用的時機:
1.當你開發軟體需要兩支不同的*.exe共用某些資料時
2.當兩支不同的*.exe需要傳送資料,且資料過大無法用SendMessage或PostMessage時
3.當你希望讓某些資料一直存在直到程式結束時,且這資料可以讓其他程式讀取時

ShareMemory的運作原理,它會建立一塊可以分享的記憶體,主要透過一個名稱用來尋找到該分享的
記憶體,也就是說只要知道該分享記憶體的名稱就可以存取該記憶體中的資料..

HANDLE hFile; 

//1.建立ShareMemory
char szFileName[256] = "ShareM";     //必需取一個非常特殊的名稱
//建立一個大小為1024bytes的分享記憶體
hFile = CreateFileMapping((HANDLE)0xFFFFFFFF,0,PAGE_READWRITE,0,1024,szFileName);

//2.寫資料到ShareMemory
LPVOID lpView = MapViewOfFile(hFile,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
strcpy((char*)lpView,"測試寫資料");
UnmapViewOfFile((LPVOID)lpView);

//3.開啟ShareMemory
HANDLE hFile1 = OpenFileMapping(FILE_MAP_READ|FILE_MAP_WRITE,FALSE,szFileName);

//4.從ShareMemory中取出資料
char szData[2048];
LPVOID lpView = MapViewOfFile(hFile1,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
sprintf(szData,"%s",(LPTSTR)lpView);
UnmapViewOfFile((LPVOID)lpView);

//5.關閉ShareMemory
//OpenFileMapping時使用
if(hFile1)
    CloseHandle(hFile1);
//CreateFileMapping時使用
if(hFile)
    DeleteObject(hFile);

大致的用法說明:
例如你有A.exe和B.exe兩支程式,想要用sharememory來分享資料。
A.exe用到的部份
1.建立ShareMemory
2.寫資料到ShareMemory
4.從ShareMemory中取出資料
5.關閉ShareMemory

B.exe用到的部份
3.開啟ShareMemory
2.寫資料到ShareMemory
4.從ShareMemory中取出資料
5.關閉ShareMemory

      
註:關CreateFileMapping,MapViewOfFile,UnmapViewOfFile的用法請參考MSDN中的資料,將會有詳細的說明..
註1:以後將會有類似的應用程式

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-27
  • 2022-12-23
  • 2022-12-23
  • 2021-12-14
猜你喜欢
  • 2022-12-23
  • 2022-01-21
  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2021-11-20
相关资源
相似解决方案