我有一个使用静态线程本地存储 (__declspec(thread)
) 的 DLL(用 C 语言编写),我想从 Visual Basic 图形界面使用这个 DLL。
不幸的是,当在 Windows XP 上运行界面时,使用静态线程本地存储的 DLL 在尝试访问其线程变量时崩溃。
我该如何解决这个问题?
谢谢, 问候
G.B.
附言 我不想修改 DLL。
最佳答案
这是一个 known limitation静态 TLS。尽管您没有显式调用 LoadLibrary()
,但 VB 运行时会代表您执行此操作。
请注意,此限制已从 Vista 中解除。据我所知,最全面的引用资料是 Ken Johnson 的 blog .
如果您可以将 DLL 包含在生成的 .exe 的导入表中,您也许可以解决这个问题,这可能会涉及一些 PE 黑客攻击,我不确定这是一个可行的策略。否则,您将需要更改 DLL。
关于multithreading - 使用声明为 __declspec(thread) 的变量崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5194573/