【发布时间】:2013-09-20 10:30:15
【问题描述】:
我编写了一个从第三方应用程序(使用 VBA 编写脚本)加载的 COM DLL。
在启动时,应用程序将一个值传递给 DLL,以便之后找到它的实例。
这个(非托管)值是我创建的应用程序的特定类型 static 和全局(它在任何类之外)。
DLL 在注册表中正确注册(使用regasm)并且第三方应用程序正确加载了 DLL。
DLL 被放置在系统的目录中(即 System32 或 SysWoW64)。
在 Windows XP 中,DLL 的工作方式非常棒,但在 Windows 7(64 位)中,存在一个问题:静态值变为空!但是,DLL 的其余部分运行良好,只是这个值有问题。
另一方面,当我们将 DLL 放在非系统的文件夹中时,就可以了。
我认为GC破坏了值,但不可能,因为有静态和非托管。
GC 的问题是什么?为什么系统的文件夹不起作用(即使具有管理员权限)? Windows7有什么特长吗?
【问题讨论】:
-
不,垃圾收集器不会在您放置 DLL 的位置发出提示。你离使用调试器诊断问题还有很长的路要走,数据断点会创造奇迹。在你完成这项工作之前,猜测原因是没有意义的。
-
如果我错了,请纠正我,但是 DLL 是由第三方应用程序加载的事实使得无法调试。就位,我在代码中放了一些
MessageBox。 -
MessageBox显示静态值已正确初始化,然后直接变为nullptr。 -
当然你可以在这种情况下调试DLL,只需在Debugging settings中选择客户端EXE作为Command设置即可。如果你从来没有这样做过,那么几乎可以肯定你有一个错误。你还没有调试它。
-
非常感谢!我会尽快尝试的。
标签: .net windows dll com c++-cli