VS2015 ATL 在XP 系统下无法注册

来源:互联网 发布:格力空调代码含义 知乎 编辑:程序博客网 时间:2024/04/30 04:52
  1. Link the CRT statically - in Config Properties / C/C++ / Code Generation / Runtime Library select the non-DLL multi-threaded option, for example/MT in the release build.

  2. Add /Zc:threadSafeInit- (n.b. the trailing - is part of the switch) to the compiler options under Config Properties / C/C++ / Command Line / Additional Options.

Workaround #2 comes from the open case at https://connect.microsoft.com/VisualStudio/feedback/details/1907257.

Windows Server 2003 and Windows XP have problems with dynamically loading a DLL (via LoadLibrary) that uses thread-local storage, which is what thread-safe statics use internally to provide efficient execution when the static local has already been initialized. As these systems are out of support, it is extremely unlikely for a patch to be created for those systems to add this support as is present in Vista and newer OSes, and we are reluctant to penalize the performance on in-support OSes to provide this functionality to the old out-of-support ones.

To work around the issue you can use /Zc:threadSafeInit- to disable the thread-safe initialization code and this will avoid the thread-local variable. Of course by doing so the initialization code reverts back to the VS2013 mode and is not thread-safe, so this option is only viable if you don't rely on the thread-safety of local statics.

使用VS2015 ATL 制作的ACTIVEX控件在XP下无法注册。注册时提示 内存分配不成功。按上述两步更改重新生成后,可在XP内注册成功。




0 0