zoukankan      html  css  js  c++  java
  • [学习记录] 使用C#语言调用.dll(动态链接库)文件

    感谢大家的博客教会了我很多,我也要写出来参与社区建设.

    嘛不一定完全正确,想要可靠性比较高的同志建议买书,书中出处啥的比较详细,可靠性比较高.

    ---------------------

    1.基本步骤

      1.1 向项目中导入dll文件

      1.2 阅读dll文件的使用手册 [ 和头文件(.H) ]

      1.3 编写导入dll文件中方法的代码

      1.4 编写读取dll中对应数据的代码(可能略)

      1.5 写方法调用dll中方法并加以判断调用是否成功

      1.6 在相关位置调用使用自己定义的调用方法

    2.基本实现:

      2.1 向项目中导入dll文件

        复制dll文件(ctrl+c) > 打开vs项目对应处粘贴(ctrl+v)

      2.2 阅读dll文件的使用手册 [ 和头文件(.H) ]

        打开: 双击PDF等类型的使用手册  || 右键打开方式使用记事本打开头文件(||直接用vs打开)

        查阅:定义+函数列表+函数说明等     ||  功能+输入+输出+返回值

      2.3 编写导入dll文件中方法的代码

        例子:

          [DllImport("lib/NAME.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi, EntryPoint = "Open")]
          public static extern int Open(int a, int b);

        解读:

          [ ]:特性,为程序集添加额外说明信息的文件   (详情搜索:C#特性)

            DllImport: dll文件导入(import)  

         // EntryPoint:设置调用函数的名字,若没有,extern后的名字作为默认的函数名
          // ChartSet:传送字符串数据的字符集,Ansi,默认值,会影响文本参数的封送处理;Auto:可以使CLR根据当前操作系统使用适当的字符集,Unicode:基于Window NT,并只支持Unicode,就用Unicode

             // SetLastError:是否遇到任何错误都应传送,通过调用Mashell.GetWin32Error()方法检查可用性
          // CallingConvention:StdCall:由被调用都清理栈资源,调用native函数时的默认方式;

        (来自一起实习的小伙伴,是的就是你,没错就是我)

        模式:

          [DllImpor("详情搜路径/.dll"),详情搜DllImpor参数]

            public static extern 返回值类型 方法名(参数类型 参数名);

            详细用法拓展等暂略,请自行搜索

        解疑:

          (为纸上谈兵者)

           方法和参数 参考上一步的手册和头文件编写即可

        参考:

          [链接]C#调用C++生成的DLL,并返回结构体引用或者结构体指针多个值

     

      2.4 编写读取dll中对应数据的代码(可能略)

        可能用到结构体,新建类将获取数据的属性写入

        dll为C++,现在用C#的可参考:[链接]C#调用C++dll,C++中char*与C#类型的对应关系

                      [链接]C#调用C++ dll时,结构体引用传参的方法

      2.5 写方法调用dll中方法并加以判断调用是否成功

        善用if-else等,结合手册编写

        接收返回值数据并对其进行判断等

      2.6 在相关位置调用使用自己定义的调用方法

        对照手册,利用手册使用方法,注意使用顺序等 

        

    3.细节处理

      3.1 向项目中导入dll文件

        注意:  ① 右键属性||选中>视图>属性窗口;

                               ② 始终复制; 如图:

           

        避免出现此错误(在路径写正确了的情况下):[链接]无法加载 DLL“lib/xxx.dll

      3.2 编写导入dll文件中方法的代码

        注意:  如果手册等中传入参数为指针类型等,要注意C#语言中的数据类型与其它语言数据类型的转换

             例如此处C++与C#:[链接]数据类型转换

  • 相关阅读:
    es3的语法来模拟es5的bind方法
    js判断变量的类型(使用闭包来玩一把)
    获取一组时间中的最近的日期
    可以设置超时版的的fetch
    错误排查
    如何查看Linux的CPU负载
    shell脚本操作mysql数据库,使用mysql的-e参数可以执行各种sql的(创建,删除,增,删,改、查)等各种操作
    Swoole server函数列表(转载)
    php的反射
    PHP共享内存
  • 原文地址:https://www.cnblogs.com/xm1998/p/12179185.html
Copyright © 2011-2022 走看看