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方式。
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方式。