知识大全 调用非托管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一点小结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n
利用JNative实现Java调用dll动态库 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 由
asp调用C#编写的DLL发送邮件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一直想写一个a
C#使用Dllmport来调用dephi的dll 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&n
怎样在MFC中调用C#编写的DLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一使用/clr
C#实现动态调用WindowsDLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 部分代码来自
VB动态调用自己的ActiveXDLL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &
知识大全 如何在Delphi中调用.Net编写的DLL中的函数
如何在Delphi中调用.Net编写的DLL中的函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!