一个dll会被多个进程调用,想在dll中设立一些共享数据,使得某个进程改了这个数据的值,能在另一进程中表现出来。
于是dll部分代码如下:
#pragma data_seg ("sharedData")
volatile int num = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:sharedData,RWS") 并导出两个函数getNum 和 setNum 对num进行操作(利用critical_section设立了互斥访问)然后建立了一个MFC对话框程序,有两个按钮,相应单击事件如下: void CDlgTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
hModule = LoadLibrary("testDll.dll");
typedef void (* LPSETNUM) (int i) ;
LPSETNUM lpSetNum = (LPSETNUM)GetProcAddress(hModule,"setNum");
lpSetNum(6);
FreeLibrary(hModule);
} void CDlgTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
hModule = LoadLibrary("testDll.dll");
typedef int (* LPGETNUM) () ;
LPGETNUM lpGetNum = (LPGETNUM)GetProcAddress(hModule,"getNum");
CString s;
s.Format("%d",lpGetNum());
MessageBox(s);
FreeLibrary(hModule);
} 编译后,启动两个对话框程序,在第一个对话框里单击Button1, 而在第二个对话框里单击Button2,显示num 还是为0 ~~~~ 实在是搞不懂了,同样的方式在命令行程序里能实现不同进程对dll中共享数据的操作,但是换在对话框程序里怎么就不行了呢?? 诚心求教........
于是dll部分代码如下:
#pragma data_seg ("sharedData")
volatile int num = 0;
#pragma data_seg()
#pragma comment(linker,"/SECTION:sharedData,RWS") 并导出两个函数getNum 和 setNum 对num进行操作(利用critical_section设立了互斥访问)然后建立了一个MFC对话框程序,有两个按钮,相应单击事件如下: void CDlgTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
hModule = LoadLibrary("testDll.dll");
typedef void (* LPSETNUM) (int i) ;
LPSETNUM lpSetNum = (LPSETNUM)GetProcAddress(hModule,"setNum");
lpSetNum(6);
FreeLibrary(hModule);
} void CDlgTestDlg::OnButton2()
{
// TODO: Add your control notification handler code here
hModule = LoadLibrary("testDll.dll");
typedef int (* LPGETNUM) () ;
LPGETNUM lpGetNum = (LPGETNUM)GetProcAddress(hModule,"getNum");
CString s;
s.Format("%d",lpGetNum());
MessageBox(s);
FreeLibrary(hModule);
} 编译后,启动两个对话框程序,在第一个对话框里单击Button1, 而在第二个对话框里单击Button2,显示num 还是为0 ~~~~ 实在是搞不懂了,同样的方式在命令行程序里能实现不同进程对dll中共享数据的操作,但是换在对话框程序里怎么就不行了呢?? 诚心求教........
解决方案 »
- 关于mfc里接受消息的疑问
- 在view添加工具栏,编译通过但显示不出,求救
- CpropertSheet类的创建?
- 如何在视图中加入垂直滚动条 和水平滚动条 ,,详细一点 谢谢
- 用事件传递消息是遇到的问题
- 这是我写的一份钩子代码!!在XP下可以运行,但在9X下有问题!!那位仁兄提示提示!!
- 如何让LISTBOX里的ITEM不重复?
- 多线程问题
- 求助jameshooo,jiangsheng,请教webbrowser中拦截blur的有效法则
- 如何创建一个微软雅黑字体的CFont类对象???
- [小白贴] 请问vc6.0出现如下错误提示我应该怎么解决呢?麻烦写详细些。给个连接也行
- 判断路径文件是否存在,文件路径太长怎么办?
把hModule = LoadLibrary("testDll.dll"); 和FreeLibrary(hModule); 移出OnButton1和OnButton2函数,仅在程序启动和退出时执行一次就可以了。
两个对话框程序都启动以后,再操作,看是否正常?
因此压根就不是一个变量,一个改变,肯定不会引起另外一个改变啊。。
#pragma comment(linker,"/SECTION:sharedData,RWS") 学习了点东西。。高深,暂不作评论。
你应该在进程开始时载入那个dll,并且永远不freelibrary
volatile int num = 0;
#pragma data_seg()
有可能每回启动的时候volatile int num = 0; 都会定义一次
你可以试下两个都启动之后,再修改里面的内容看看