【发布时间】:2014-06-13 17:32:42
【问题描述】:
我们在客户现场遇到问题;客户使用日期为 2011 年 2 月 19 日的 VS2010 运行时和版本 10.0.40219.1 构建了他的应用程序 客户的应用程序使用我们的 dll,它也是使用 VS2010 Runtime 构建的,但版本稍旧。
我们在安装程序中有一个选项,您可以在其中跳过安装 VC Runtime 可再发行组件,这里客户会跳过,因为他已经安装了运行时。
这里的问题是,如果客户的应用程序先启动然后加载我们的 DLL,那么就没有问题。但在另一种情况下,如果客户的 App 只加载 msvcr100.dll 而没有加载 msvcp100.dll 然后当我们的dll被加载时,我们得到一个错误“R6030 CRT Not initialized”
这是因为运行时不兼容的问题,运行时和应用程序是否应该使用完全相同的版本进行编译?
【问题讨论】:
-
这个问题已经解决了,当这个问题发生时,我做的是创建一个内存转储,在分析这个转储时,我们发现其中一个应用程序 dll 在其 DllMain 中执行 LoadLibrary。当这个问题得到解决后,问题就解决了,所以底线是永远不要在 Dllmain 中调用 LoadLibrary
标签: c++ visual-c++ mfc atl