知识大全 调用非托管dll常出现的bug及解决办法

Posted

篇首语:人若是把一生的光阴虚度,便是抛下黄金未买一物。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 调用非托管dll常出现的bug及解决办法相关的知识,希望对你有一定的参考价值。

  C和C++有很多好的类库的沉淀 在 NET中 完全抛弃它们而重头再来是非常不明智的 也是不现实的 所以 我们经常需要通过Pinvoke来使用以前遗留下来的非托管的dll 就 NET中使用非托管的dll经验而言 经常碰到的问题至少有两个 它们都是通过在运行时抛出异常来体现的

   试图加载格式不正确的程序

  出现这种异常 通常是 NET应用程序的“目标平台”与非托管dll的平台不一样

  一般 在使用VS开发 NET的应用程序和类库时 默认的目标平台为“Any CPU” 即会在运行时可根据CPU类型自动选择X 或X 拥有这样的能力是因为 NET编译后的程序集是基于IL的 在运行时 CLR才会将其JIT发射为X 或X 的机器码

  而C或C++编译生成的dll就是机器码 所以 其平台的决策是在编译时决定的 通过编译选项的设置 我们可以将C/C++项目编译为X 的dll或者X 的dll

  所以 在调用了非托管dll的 NET项目中 也需要将其目标平台属性设为与非托管的dll的运行平台完全一致 通常遗留下来的非托管dll都是基于x 的 所以 在调用了这类非托管dll的 NET项目中 就将其目标平台属性设为“X ”

  可根据“项目 >属性 >生成 >目标平台”找到该设置

>

   无法加载dll 找不到指定的模块

  运行调用了非托管的 NET应用程序有时会出现这种异常 可是比较郁闷的是 这种异常并不是在所有的电脑上都会出现 就经验来说 它只是在少部分电脑上出现 而在绝大部分电脑上运行都是正常的 我们在开发语音视频录制组件MFile时 就遇到过这个问题 当时很是头疼

  如果出现这种情况 很大的可能就是那少部分电脑上没有安装VC++运行时(CRT) 或者是CRT安装不正确导致的 好用的解决方案有两种

  ( )在C盘下找到了下列文件 msvcm d dll msvcp d dll msvcr d dll Microsoft VC DebugCRT manifest 把这几个文件拷贝到目标机器上 放到运行目录下或放到system 下 就可以了

  注意 一般这几个文件都有多个版本 位于不同的文件夹下 要观察其文件夹的名称 是x 还是x 的 是debug的还是release的 以及是否要MFC的 这些选择要与非托管dll的信息一致

cha138/Article/program/net/201311/14300

相关参考

知识大全 求原因及解决办法

电脑卡的厉害,只是打开“我的电脑”也会卡,用360急救箱查了好几遍也没有病毒之类的!求原因及解决办法!电脑用了很长时间会卡的毕竟有无效的dll文件。建议彻底的方法是重装系统。硬件不行的话就重配一个。跪

知识大全 js 定时器setTimeout无法调用局部变量的解决办法

js定时器setTimeout无法调用局部变量的解决办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 JNA调用DLL一点小结

JNA调用DLL一点小结  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &n

知识大全 利用JNative实现Java调用dll动态库

利用JNative实现Java调用dll动态库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  由

知识大全 asp调用C#编写的DLL发送邮件

asp调用C#编写的DLL发送邮件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一直想写一个a

知识大全 C#使用Dllmport来调用dephi的dll

C#使用Dllmport来调用dephi的dll  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n

知识大全 怎样在MFC中调用C#编写的DLL

怎样在MFC中调用C#编写的DLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一使用/clr

知识大全 C#实现动态调用Windows DLL

C#实现动态调用WindowsDLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  部分代码来自

知识大全 VB动态调用自己的ActiveX DLL

VB动态调用自己的ActiveXDLL  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &

知识大全 如何在Delphi中调用.Net编写的DLL中的函数

如何在Delphi中调用.Net编写的DLL中的函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!