【发布时间】:2011-05-17 11:08:33
【问题描述】:
我有一个程序集和一个非托管 DLL。我尝试在非托管 DLL 中使用静态变量,但它似乎在程序集调用之间无法生存。
我想知道非托管 DLL 中的静态变量是否可以在 P/Invoke 调用之间存在,可能我的代码中遗漏了一些东西。如果没有,如果全局静态变量不是一个选项,那么为这种非托管 DLL 存储状态的最佳方法是什么?
【问题讨论】:
-
只要不卸载 DLL,静态变量就应该存在。所以这应该有效。你能显示一些代码吗?
-
@Codo 我又检查了一次,现在它工作了,所以我错过了一些东西。很抱歉我发布了这个问题,我很容易相信一个变量在调用之间没有存在。我应该关闭这个问题吗?顺便说一句,非托管 DLL 是否在第一次 pinvoke 期间加载一次并在应用程序存在时卸载?我开始相信 DLL 在 pinvoke 后由 CLR 加载和卸载。
-
加载和卸载 DLL 相当昂贵。所以我不认为它经常发生。但我不知道它何时真正发生。在 SO 上可能值得另一个问题。