有一个Share.dll,接口函数是
WriteRecord(DATA&);
ReadRecord(DATA&);
全局静态成员
static DATA g_data;
还有二个进程P1和P2,他们都加载Share.dll
P1调用WriteRecord
P2调用ReadRecord
调试的时候P1进程的WriteRecord可以正常执行,且g_data的值也被正确地传进去了
这时P2进程用ReadRecord时,跟踪到DLL内的时候从P2进程传过来的DATA的引用是不可用的,为什么啊??用了指针也不行,期待各位高手解答!!!
------解决方案--------------------
共享数据DLL允许进程以类似于Windows 3.1 DLL共享数据的方式访问读写数据,多个进
程都可以对该共享数据DLL进行数据操作,达到共享数据的目的。在WIN32中为建立共享
内存,必须执行以下步骤:
首先创建一个有名的数据区。这在Visual C++中是使用data_seg pragma宏。使用data_
seg pragma宏必须注意数据的初始化:
#pragma data_seg("MYSEC")
char MySharedData[4096]={0};
#pragma data_seg()
然后在用户的DEF文件中为有名的数据区设定共享属性。
LIBRARY TEST
DATA READ WRITE
SECTIONS
.MYSEC READ WRITE SHARED
这样每个附属于DLL的进程都将接受到属于自己的数据拷贝,一个进程的数据变化并不会
反映到其他进程的数据中。
在DEF文件中适当地输出数据。以下的DEF文件项说明了如何以常数变量的形式输出MySh
aredData。
EXPORTS
MySharedData CONSTANT
最后在应用程序(进程)按外部变量引用共享数据。
extern _export"C"{char * MySharedData[];}
进程中使用该变量应注意间接引用。
m_pStatic=(CEdit*)GetDlgItem(IDC_SHARED);
m_pStatic->GetLine(0,*MySharedData,80);