multithreading - 使用声明为 __declspec(thread) 的变量崩溃

标签 multithreading dll

我有一个使用静态线程本地存储 (__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/

相关文章:

iOS 无效行更新异常

c - 在随机条件下的无限 while 循环中创建读取器和写入器线程时出现段错误

c++ - 延迟加载 DLL

c++ - 继承自模板的 MSVC DLL 导出类导致 LNK2005 已定义错误

linux - 在 Linux 中使用针对 Windows 制作的 SDK 来适应不同的架构

c# - 使用多个参数启动任务的标准做法是什么

c++ - 条件变量的谓词

multithreading - 多线程编程中是否可以恢复死锁?

c# - 放置第三方 DLL 以供引用的最佳位置

带 DLL 的 Spring-boot 可执行 tomcat