DLL中声明了一个全局变量 CString myStr 用于保存一些运行时的信息,应用程序A和B均隐式调用了这个DLL,并且都通过方法对myStr进行了赋值,结果后赋的值覆盖掉了前面赋的值,也就是说 myStr这个变量被应用程序A和B共享了,需要怎么做才能在A和B中各自生成一个myStr的实例呢?DLL中声明如下:
_declspec(dllexport) CString myStr="var";void _declspec(dllexport) myFunc (CString Value)
{
myStr = value;
}在程序A中
myFunc ("Proc A");在程序B中
myFunc ("Proc B");先运行A,在运行B发现 不管在A中还是B中 myStr的值都变成了 "Proc B" 郁闷阿!怎么让他们各自拥有一个instance阿???!!!环境:VC.Net (VC 7.0) Windows XP
_declspec(dllexport) CString myStr="var";void _declspec(dllexport) myFunc (CString Value)
{
myStr = value;
}在程序A中
myFunc ("Proc A");在程序B中
myFunc ("Proc B");先运行A,在运行B发现 不管在A中还是B中 myStr的值都变成了 "Proc B" 郁闷阿!怎么让他们各自拥有一个instance阿???!!!环境:VC.Net (VC 7.0) Windows XP
在 .def文件中
SECTIONS mydata READ WRITE SHARED
在程序中
#pragma data_seg ("mydata")
char sharedata[10]={0};
#pragma data_seg()
extern CString str;
在export.cpp中
include "stdafx.h"
CString str="hello"
这样来申明全局变量还有就是你要弄的是一个静态的DLL,在装载的时候放在各自的PATH下面,各个程序分别都装载不同但是内容相同的DLL文件,这样才行,
而你可能是几个程序都共享了一个DLL文件,在执行时期都共享一个内在单元了.
A:-------------::LoadLibrary("1.dll");
B:-------------::LoadLibrary("2.dll");
#pragma data_seg("a")
HWND g_hWnd=NULL;//g_hWnd是你在dll中定义的一个全局的HWND类型的变量
#pragma data_seg("a")
#pragma comment(linker,"section:a,RWS")//这行代码也可以去模块定义文件中用下面的代码替换掉
SEGMENTS
a READ WRITE SHARED
象你这样导出全局变量在两个不同的程序中调用的话,应该是有两个不同的实例的。
也就是A程序修改不会对B程序修改造成影响。(我是根据理论来的。没有实际经验)
你不导出全局变量,间接地导出一个接口来返回这个CString值来看看
我还以为是各自独立的 又白痴了用指针char* 然后 LoadLibrary后 分别调用一个函数new一下 不知道什么情况 呵呵
你再仔细看看。全局变量在两个进程中是无关的。
不要象这样导出“_declspec(dllexport) CString myStr="var";”,将前面的修饰符去掉就是普通的变量