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

来源:互联网 发布:矩阵分解 混合模型 编辑:程序博客网 时间:2024/06/01 10:09

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方式。
原创粉丝点击