非委托DLL的使用以及异常处理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
很多朋友应该也遇到过添加Dll,委托Dll的添加这个很简单,非委托Dll的添加其实也不难,难的是异常情况的处理


提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是非委托Dll?

在我所理解的来,就是通过其他程序语言编译得来的Dll,例如像C++编译生成的Dll,这种Dll不能直接通过添加引用的方式进行添加。

二、怎么引用非委托Dll

1.引入Dll

代码如下(示例):

[DllImport("xxx.dll", EntryPoint = "Learn",SetLastError =true,CallingConvention =CallingConvention.StdCall)]
        private extern static int Learn(byte[] FullName ,ref dtData DataStruct);

这里有必要说明一下这个Dll的路径问题,这里我也掉坑了。程序在寻找你引用Dll的顺序是
1.从你程序的Debug下
2.从我的电脑—windows–system32或者syswow64中找
3.环境变量
还有这里的路径必须是字符串,我尝试使用Application.StartPath—不能使用。

2.异常问题

我觉得这个问题才是重中之重。由于这个问题一直琢磨了好几天
1.“试图加载格式不正确的程序”
这个问题,网上的几乎都是说改变目标平台。这个理解没有错,都是你有时候是不是发现你的DLL是64位的(这里都用64位做例子说明),你编译的也是64位的,为什么还是编译不了呢。
使用的这个DLL的依赖文件(一般也是DLL文件)的目标平台跟使用的DLL目标平台不一致
这里的重点是依赖DLL,也就是说你使用的这个xxx.dll在使用的时候还调用了其他的例如aaa.dll,bbb.dll.等。而aaa.dll是在32位系统下生成的,所以就会出现试图加载不正确的程序 。
2.”无法加载xxx.dll,找不到指定的模块”
你检查的时候发现,你的路径没有错啊,明明在这个路径下面,为啥就是找不到。其实问题还是出在依赖Dll上。使用的Dll所带的依赖Dll,不完整,有的缺失了。比如你要使用XXX.dll,他的依赖dll还有ccc.dll.但是你的电脑里面没有这个Dll.好吧,这个问题就出现了。
解决方法:下载dependency walker.这是个专门找依赖dll的软件。
在这里插入图片描述
把缺少的从网上下载,或者从其他途径弄过来。

总结

纯属个人经验,如有不对之处请各位大佬指出

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页

打赏作者

DD日常

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值