现在的位置: 首页 > 综合 > 正文

Dll和另外的exe之间的通信(使用内存映射文件)

2019年10月05日 ⁄ 综合 ⁄ 共 1557字 ⁄ 字号 评论关闭

Dll如果需要使用到其他的exe中产生的数据可以通过使用内存映射文件来实现,下面附上代码,不过是两个exe之间的例子,原理一样。
exe1:负责写入内存
 
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
 HANDLE hFileMap;
 HANDLE hEvent;
 LPBYTE pcMap;
 hEvent = CreateEvent(NULL, false, false, "MyEvent");
 if(hEvent == NULL)
 {
  printf("createEvent failed\n");
  return 0;
 }
 hFileMap = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, 4 * 1024, "MyShareData");
 if(hFileMap == NULL)
 {
  printf("createfilemapping failed\n");
  return 0;
 }
 pcMap = (LPBYTE)MapViewOfFile(hFileMap, FILE_MAP_READ|FILE_MAP_WRITE,
  0, 0, 0);
 if(pcMap == NULL)
 {
  printf("MapViewOfFile failed\n");
  CloseHandle(hFileMap);
  return 0;
 }
 printf("begin write\n");
 /*int i;
 for(i = 0; i < 26; i++)
 {
  pcMap[i] = 'a' + i;
 }*/
strcpy((char   *)   pcMap   ,   "we are ready!");

 //pcMap[i] = 0;
 UnmapViewOfFile(pcMap);
 CloseHandle(hFileMap);
 SetEvent(hEvent);
 CloseHandle(hEvent);
 return 1;
}
 
 
exe2:负责从内心中读取数据
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
 HANDLE hEvent;
 HANDLE hFileMap;
 LPBYTE pcMap;
 hEvent = CreateEvent(NULL, false, false, "MyEvent");
 if(hEvent == NULL)
 {
  return 0;
 }
 hFileMap = CreateFileMapping((HANDLE)0xffffffff,NULL,
  PAGE_READWRITE, 0, 4 * 1024, "MyShareData");
 if(hFileMap == NULL)
 {
  return 0;
 }
 pcMap = (LPBYTE)MapViewOfFile(hFileMap,FILE_MAP_READ|FILE_MAP_WRITE,
  0, 0, 0);
 if(pcMap == NULL)
 {
  printf("MapViewOfFile failed\n");
  CloseHandle(hFileMap);
  return 0;
 }
 WaitForSingleObject(hEvent, 3600 * 1000);
 printf("the string is: %s\n",pcMap);
 UnmapViewOfFile(pcMap);
 CloseHandle(hFileMap);
 CloseHandle(hEvent);
 getchar();
 return 1;
}
 
通过以上方式dll可以共享到exe中的数据,exe共享dll的数据也可以采用相同的方式,或者采用CWnd::OnCopyData方式。

抱歉!评论已关闭.