因为这里是不同的进程同时加载一个动态库,所以要求两个进程的位数必须与dll相同,即只能使32位与32位通讯,64位与64位的通讯。
其中的原理就是:
设置某一块物理内存为“共享读共享写”,对其写的时候就不会触发操作系统的拷贝写。
//Dll.cpp
#include <iostream>
#include <windows.h>
using namespace std;
char __BufferData[MAX_PATH] = "HelloDll";
#pragma data_seg("SHARED")
char __ShareData[MAX_PATH] = "HelloDll";
#pragma data_seg()
#pragma comment(linker,"/SECTION:SHARED,RWS")
extern CRITICAL_SECTION __CriticalSection;
_declspec(dllexport)
char* GetBufferData()
{
return __BufferData;
}
_declspec(dllexport)
void SetBufferData(char* BufferData,int BufferLength)
{
__try
{
memcpy(__BufferData, BufferData, BufferLength);
}
__except (EXCEPTION_EXECUTE_HANDLER)
{
printf(