【发布时间】:2009-11-10 09:51:27
【问题描述】:
我正在开发一个 64 位进程内 VC++ ATL COM 服务器,它基本上只是将所有调用重定向到进程外 COM 服务器。所以我的 COM 服务器基本上什么都不做。
最初它在 DLL 中使用 C++ 运行时(/MD 编译器开关)。我注意到,当我在干净的 64 位 Win2k3 regsvr32 上部署它时出现错误:LoadLibrary({fileName}) failed – 此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。
Google 提供帮助 - 问题是未安装 VC++9 运行时。即使 msvcr90.dll 与我的 COM 服务器位于同一目录中,问题仍然存在。我猜这是因为搜索依赖库的工作方式 - 它不会查看同一个目录,我需要 Windows\System32 等中的 msvcr90.dll 。由于这对我的部署来说很复杂,我转而使用静态链接的 C++ 运行时(/MT 编译器开关)。现在它部署得很好。 .dll 文件的大小仅为 110k(原为 45k),因此不会打扰我。
现在我听说了很多关于在一个进程中混合不同版本的 C++ 运行时是多么糟糕 - CRT 状态可能会被破坏,地狱可能会变得松散等等。我是否必须考虑这一点,并期望将 /MD 更改为 /MT 会出现问题,尤其是因为我不知道 COM 服务器消费者使用的是什么版本?
【问题讨论】:
标签: c++ visual-c++ com atl 64-bit