Mit*_*eed 9 winapi dependencies visual-studio-2010 visual-studio
我有一个c ++/cli dll,我在运行时加载,在调试模式下工作得很好.如果我尝试在发布模式下加载dll,则无法加载说明缺少一个或多个依赖项.如果我运行依赖它我从MSVCM90.DLL缺少MSVCR90.DLL.如果我检查dll的调试版本它也有缺少的依赖项,但是对着debug(D)版本.
我确保调试/发布嵌入了清单文件.我读到了有关应用程序加载dll正在构建为任何CPU和dll被构建为x86的问题,但我不知道如何将它们都设置为x86.
我正在使用VS2010.
无论如何,我现在已经搞砸了一段时间,并且不知道出了什么问题.我相信那里有人知道发生了什么事.如果我需要包含其他信息,请与我们联系.
alt text http://www.freeimagehosting.net/uploads/fb31c0e256.png
更新:
这最终解决了我的问题:http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/07794679-159b-4363-ae94-a68fe258d827
Jas*_*ams 10
MSVCR90是Visual Studio 2008的运行时.如果您在开发PC上运行应用程序,那么您应该安装调试和发布运行时(作为Visual Studio的一部分),但是您的安装可能出现问题,或者VS2010实际上并未包含旧版本运行时间.如果您尝试在另一台PC上运行Release,那么它只需要安装运行时.
无论哪种方式,您都可以通过安装Visual Studio 2008可再发行组件来修复它- 但请确保为您的PC(x86或x64)获得正确的下载.
在VS的早期版本中,您需要运行所编译的版本,因此如果VS2010遵循此先例,您需要MSVCR100,而不是MSVCR90 - 这表明您可能没有使用VS2010重新编译dll - 这样做可能是另一种让它在你的PC上运行的方法(使用VS2010安装中的redist),但要注意你仍然需要其他用户在他们的PC上安装适当的(VS2010)可再发行组件.
至于"任何CPU"与"x86",这只是在64位计算机上的问题.在这些系统上,64位应用程序无法动态链接到32位dll.如果将应用程序编译为"任何CPU",它将在64位操作系统上进行JIT编译为64位,因此如果它尝试直接调用任何32位dll,则会崩溃.解决方案是构建面向"x86"的应用程序,因为这会强制JIT编译器生成32位代码(即使在64位计算机上),从而确保与您希望调用的DLL兼容.如果DLL是托管程序集,那么您可以在app和dll上使用任何CPU,因为它们都将被JIT打印为相同的格式.
| 归档时间: | 
 | 
| 查看次数: | 28517 次 | 
| 最近记录: |