读书人

利用DLLs实现应用程序间的数据传输 在

发布时间: 2012-01-11 22:28:46 作者: rapoo

利用DLLs实现应用程序间的数据传输 在VC 中如何实现?
看了http://www.itepub.net/html/kaifawendang/C__/OLE_COM_DLL_XML/2006/0429/7007.html 中关于 利用DLLs实现应用程序间的数据传输 的介绍,我用VC做了一个DLL,

可并没有得到服务器更新数据,客户机能读到更新数据的结果,能告诉我错哪了吗?

我的做法是,用VC6 的MFC AppWizard(dll) 生成一个sample Dll
名称叫DataOperater

DataOperater.h 中 在类的

HGLOBAL hMem; //全局变量
class CDataOperaterApp : public CWinApp

在DataOperater.cpp 的CDataOperaterApp theApp;后面添加函数

CDataOperaterApp theApp;
extern "C " _declspec(dllexport) HGLOBAL GetGlobalMem()
{
return hMem;
}

在构造函数据中修改为
CDataOperaterApp::CDataOperaterApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
int nSize;
nSize=1024;//定义10K的空间
hMem = GlobalAlloc(GMEM_MOVEABLE |GMEM_DDESHARE ,nSize);
if (hMem==0)
{
AfxMessageBox( "Could not allocate memory ",MB_OK,NULL);
}

}


但是,分别用两个程序去调用这个DLL,一个向这个DLL写数据,另一个读数据,总发现读数据那并没有读取写数据那个程序所写的数据,这是为什么?不能通过这个DLL来传递数据吗?如何才能通过DLL来传递数据?

[解决办法]
:)
[解决办法]
你的数据(hMem = GlobalAlloc(GMEM_MOVEABLE |GMEM_DDESHARE ,nSize);)并不是所有DLL的实例共有的。而是独有的。

1.你可以采用内存映射。让所有DLL的实例共享同一块内存。
2.可以通过以下方式来实现
#pragma data_seg( ".cdkey ")
charg_CDKey[255] = {0};
#pragma data_seg()

#pragma comment (linker, "/SECTION:.cdkey,RWS ")

读书人网 >VC/MFC

热点推荐