我有一个使用静态线程本地存储(__declspec(thread)
)的DLL(用C编写),我想从Visual Basic图形界面使用这个DLL。
不幸的是,当在Windows XP上运行该接口时,使用静态线程本地存储的DLL在尝试访问其线程变量时崩溃。
我该如何解决这个问题?
谢谢, 此致
G.B。
PS 我想不修改DLL。
答案 0 :(得分:5)
这是静态TLS的known limitation。虽然您没有显式调用LoadLibrary()
,但VB运行时代表您这样做。
请注意,此限制已从Vista中解除。我所知道的最全面的参考文献是Ken Johnson的blog。
如果您可以将DLL包含在生成的.exe的导入表中,您可能能够解决问题,这可能涉及一些PE黑客攻击,而且我很不确定它是否可行。否则你需要更改DLL。