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

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方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值