DLL中static变量问题 有一个IO.LIB静态库中有属于类的static变量,DLL A和B各自链接了IO.LIB。在EXE A中启动线程调用了DLL A,DLL A中又调用了DLL B(非线程调用),DLL B中对static变量初始化,在DLL B返回之后,DLL A的static变量没有变化。请问这个static变量的归属是怎样的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 dll B是对DLL B中的静态变量初始化,它不对DLLA中的静态变量初始化,LIB是静态库,两个DLL中都有它的代码,两个DLL是独立的,如果是IO.DLL那么DLLA和DLLB就共用IO代码. DLL中的静态变量只在DLL中有效。貌似是vc6的bug to wwwllg:进程是一个进程,但是结果却不像你所说的那样,DLL A对static变量的初始化对DLL B没有任何影响,DLL B的static变量还是初始值。 我以前做过一次测试,但时间太久远,5,6年了,我这次又得新做了一个例子。我做了这样的一个工程。a,b,c三个dllc中有一个static变量d = 24;a,b都加载c.b中f()把d设置成100.a中f()把d设置成101.在a中export接口,getd();我在测试程序test.exe中,加载f。并调用f(),然后getd();返回 值为100. 我在测试程序test.exe中,加载a。并调用f(),然后getd(); 返回 值为100. 用extern int dllGlobalVar声明所导入的并不是DLL中全局变量本身,而是其地址,应用程序必须通过强制指针转换来使用DLL中的全局变量extern int _declspec(dllimport) dllGlobalVar; //用_declspec(dllimport)导入通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,笔者建议在一切可能的情况下都使用这种方式。 翻阅了一些资料,static数据不是跨链接单元的,只在自己的单元内可见。所以static的数据各是各的。 VC6导出makefile问题 字节对齐的问题 再问回调函数!!! sdk调用显示窗口位置问题? 请问树形控件的用法。 使用_RecordsetPtr catch不到错误 类型转换小问题??求援!!! 怎样用VC编写程序实现把汉字转换成图片格式? 如何使程序运行时不可见 如何在OnSize中调整SplitterWnd的大小? 关于一个两程序同时操作一个数据库的的问题,帮忙解答,谢谢! SetPixel和BitBlt的区别在哪里?
我做了这样的一个工程。
a,b,c三个dll
c中有一个static变量d = 24;a,b都加载c.b中f()把d设置成100.a中f()把d设置成101.在a中export接口,getd();
我在测试程序test.exe中,加载f。并调用f(),然后getd();返回 值为100.
通过_declspec(dllimport)方式导入的就是DLL中全局变量本身而不再是其地址了,笔者建议在一切可能的情况下都使用这种方式。