怎么在进程间交换复杂数据类型数据?
我需要共享的数据中一般定义如下:
typedef struct
{
char *szBuffer;
LPVOID *lpp;
int iSize;
}SHAREDATA, LPSHAREDATA;
请问各位大侠,通过内存映射文件及其其它方式怎么做到跨进程间共享或交换数据,高分求教,有实现最佳,不够可以另外开专题加分。
我需要共享的数据中一般定义如下:
typedef struct
{
char *szBuffer;
LPVOID *lpp;
int iSize;
}SHAREDATA, LPSHAREDATA;
请问各位大侠,通过内存映射文件及其其它方式怎么做到跨进程间共享或交换数据,高分求教,有实现最佳,不够可以另外开专题加分。
COM
Data Copy
DDE
File Mapping
Mailslots
Pipes
RPC
Windows Sockets
database
#include
#include
#include
#include
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
HANDLE hMapping;
LPSTR lpData;
hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE");
if(hMapping==NULL)
{
cout<<"CreateFileMapping() failed.";
exit(1);
}
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpData==NULL)
{
cout<<"MapViewOfFile() failed.";
exit(1);
}
sprintf(lpData,"Server Data String");
while(strlen(lpData)<20)
Sleep(1000);
cout<<"Received:"< UnmapViewOfFile(lpData);
return 0;
}
//---------------------------------------------------------------------------
2、创建客户应用程序 如同创建服务器程序一样,创建一个新的控制台项目文件,在Unit2.cpp中,加入以下代码: //---------------------------------------------------------------------------
#include
#include
#include
#pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused
int main(int argc, char* argv[])
{
HANDLE hMapping;
LPSTR lpData; hMapping=CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,0x100,"MYSHARE");
if(hMapping==NULL)
{
cout<<"CreateFileMapping() failed.";
exit(1);
}
lpData=(LPSTR)MapViewOfFile(hMapping,FILE_MAP_ALL_ACCESS,0,0,0);
if(lpData==NULL)
{
cout<<"MapViewOfFile() failed.";
exit(1);
}
cout<<"Server Data:"< sprintf(lpData,"My Client data string that is longer than 20");
UnmapViewOfFile(lpData);
return 0;
}
//---------------------------------------------------------------------------
1、能够在进程间传递复杂结构
2、结构里面可能存在着指针、指针的指针,直到好几级指针。要求把每级指针的内容都能够传递过去。
3、结构有很多个,并不是一两个结构,所以需要通用的做法。如果针对每个结构都Serialize,那工作量很大,不采取这种方式。微软COM里面的IDL语言对传递结构的方式也要每个结构都在IDL中对应重新定义,不知是否真的就没有办法达到同一个进程内访问结构那样简单。