C#调用C的动态链接库

C#调用C的动态链接库

1.C#调用C的动态链接库时的数据格式转换
参照文章:https://yq.aliyun.com/articles/678155
1.1 函数传参的数据类型转换
1.1.1 函数参数是普通的类型
1.1.2 函数参数是普通变量的指针
1.1.3 函数参数是结构体
1.1.4 定义的结构体中含有数组
1.1.5 函数参数是结构指针
1.1.5.1 适用于结构体指针不是另外一个函数的返回值

【DllImport("DLL文件名.DLL",EntryPoint = "函数名",CallingConvention = “DLL指定的调用方式”)】
  public static extern UINT32 LTI5_MobusConnect(ref _tlink tlink,string strParm) ; //注意 _tlink是一个结构体
             1.1.5.2 适用于传入的结构体指针是另外一个函数的返回值,该函数的返回值是结构体指针
【DllImport("DLL文件名.DLL",EntryPoint = "函数名",CallingConvention = “DLL指定的调用方式”)】
  public static extern UINT32 LTI5_MobusConnect(IntPtr tlink,string strParm) ; 

Note:一般来说,在使用DLL时,要明确CallingConvention的方式(四种)
2.C#调用DLL时常见错误
2.1 DLL和目标平台相冲突
调用DLL时要首先明确,调用的DLL适用于何种架构,是否与当前的目标平台,DeBug平台架构相一致
2.2 DLL之间架构不同相冲突
当调用多个DLL时,要保证DLL在是在同一架构下生成的。
2.3 DLL与.net的框架相冲突
这种情况遇到的很少,当初在使用大恒相机的DLL时,选择4.0的.net框架时,就会出现灰度图像竟然编程伪彩色,但是物体的大致轮廓可以识别。

 基于以上问题:C#调用DLL时要做到:两明确,两统一
                                                               两明确:明确DLL的生成架构,明确DLL的调用方式
                                                               两统一:C#的Debug调试架构以及生成平台架构与引用的DLL的生成架构保持统一,调用的所有DLL生                     成架构必须统一。                                                         
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值