C#使用DLLImport调用外部DLL的方法

作者:農碼一生 时间:2022-07-17 04:41:18 

C#.Net调用基本格式:

DllImport 属性提供非托管 DLL 函数的调用信息。

[DLLImport(“DLL文件路径”)]
修饰符 extern 返回值类型 方法名称(参数列表) 如:

using System.Runtime.InteropServices;
[DllImport(  "KERNEL32.DLL",
            EntryPoint="MoveFileW",
            SetLastError=true,
            CharSet=CharSet.Unicode,
            ExactSpelling=true,
            CallingConvention=CallingConvention.StdCall
         )
]
public static extern bool MoveFile(String src, String dst);

调用DLL中的非托管函数一般方法

首先,应该在C#语言源程序中声明外部方法,其基本形式是:

其中:

DLL文件:包含定义外部方法的库文件。

  • 修饰符: 访问修饰符,除了abstract以外在声明方法时可以使用的修饰符。

  • 返回变量类型:在DLL文件中你需调用方法的返回变量类型。

  • 方法名称:在DLL文件中你需调用方法的名称。

  • 参数列表:在DLL文件中你需调用方法的列表。

注意:需要在程序声明中使用System.Runtime.InteropServices命名空间。

其它可选的 DllImportAttribute 属性:

  • EntryPoint :指定要调用的 DLL 入口点。

  • SetLastError :判断在执行该方法时是否出错(使用 Marshal.GetLastWin32Error API 函数来确定)。
    C#中默认值为 false。

  • CharSet :控制名称及函数中字符串参数的编码方式。默认值为 CharSet.Ansi。

  • ExactSpelling:是否修改入口点以对应不同的字符编码方式。

  • CallingConvention:指定用于传递方法参数的调用约定。默认值为 WinAPI。该值对应于基于32位Intel平台的 __stdcall。

  • BestFitMapping :是否启用最佳映射功能,默认为 true。 最佳映射功能提供在没有匹配项时,自动提供匹配的字符。 无法映射的字符通常转换为默认的“?”。

  • PreserveSig:托管方法签名是否转换成返回 HRESULT,默认值为 true(不应转换签名)。并且返回值有一个附加的 [out, retval] 参数的非托管签名。

来源:https://www.cnblogs.com/wml-it/p/15666751.html

标签:C#,DLLImport,调用,外部,DLL
0
投稿

猜你喜欢

  • SpringBoot整合MongoDB完整实例代码

    2023-10-22 03:42:48
  • 详解EventBus 3.x 的快速使用

    2021-09-04 21:00:29
  • c语言实现的几种常用排序算法

    2022-02-23 04:04:11
  • Android中new Notification创建实例的最佳方法

    2022-03-19 15:52:25
  • c#中var关键字用法浅谈

    2022-03-14 00:21:51
  • Spark内存调优指南

    2022-07-28 09:22:25
  • Java深入浅出讲解String类常见方法

    2021-05-28 06:56:20
  • Android异步方法以同步方式实现

    2022-11-05 15:13:50
  • Android系统view与SurfaceView的基本使用及区别分析

    2023-04-08 00:33:26
  • SpringBoot资源文件的存放位置设置方式

    2023-02-26 10:37:00
  • c# HttpClient设置超时的步骤

    2023-05-07 10:42:29
  • C#归并排序的实现方法(递归,非递归,自然归并)

    2023-10-03 01:00:36
  • C#实现将DataTable内容输出到Excel表格的方法

    2023-05-01 15:20:38
  • Java实现循环体的过滤器的方法

    2023-11-22 09:35:33
  • Java中的StringUtils引入及使用示例教程

    2023-01-10 20:01:04
  • Android实现手机震动抖动效果的方法

    2023-01-25 07:27:43
  • Java 中的 xx ≠ null 是什么新语法

    2022-09-10 20:51:13
  • 基于java ssm springboot实现选课推荐交流平台系统

    2023-06-30 08:22:25
  • mybatisPlus返回Map类型的集合

    2022-01-31 13:37:07
  • C#四舍五入用法实例

    2021-07-20 02:49:20
  • asp之家 软件编程 m.aspxhome.com