c#调用DLL在非开发机器上不能运行

来源:互联网 发布:心知天气 签名验证 编辑:程序博客网 时间:2024/05/16 00:30

http://www.zeali.net/entry/476


搜索关键子C#调用DLL 发布错误

 两个工程分别是 .net2005下的 C# 和 C++ , C++ 工程使用 C++/CLI 封装了几个功能函数并在 C# 工程中加载使用封装类。在本地运行正常,但发布到其他机器上却出现异常对话框:“  Could not load file or assembly '... ...' or one of its dependencies. 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。 ( Exception from HRESULT: 0x800736B1 ) ”。

  这个错误看上去好像是 C++ DLL库本身的问题,其实并不尽然。由于使用了混合模式编译托管 DLL ,所以该 DLL 又会用到非托管的 CRT ( C Run-Time )库。如果机器上没有安装这些被使用到的运行时组件,就会产生类似 HRESULT: 0x8007 的错误。最简单的方法是下载安装 Microsoft Visual C++ 2005 Redistributable Package (x86)以得到代码运行所需的 msvcr80.dll 及 msvcm80.dll 等;也可以到系统盘下的 Program Files\Common Files\Merge Modules 目录下找到包含 CRT 字样的 msm 文件,把这些文件添加到你的安装程序里面可以达到同样的效果;如果 C++ 生成的不是 dll 而是可执行文件的话,也可以按照微软的说明直接把需要的dll拷贝到应用程序目录下。更为细致的分析说明可以参考这里:Bootstrapper for the VC++ 2005 Redists (with MSI 3.1)。

  要注意的是,如果你编译 C++ 托管程序集的时候使用的是 Debug 配置的话,生成的 DLL 需要调用的就是 CRT 对应的 debug 版本( msvcr80d.dll 及 msvcm80d.dll 等 )而不是上面那些 Redistributable Package 里面的文件。这样的话即使你使用任何一种方法去安装那些运行时库文件也还是同样会得到错误异常对话框。了解生成的 DLL 到底是 Debug 还是 Release 版本最简单的方法是用文本编辑器打开该 DLL 文件,找到以下类似的内容(一般位于文件末尾处):


原创粉丝点击