C#使用非托管 DLL 函数

https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-4.0/26thfadc(v=vs.100)

利用平台调用这种服务,托管代码可以调用在动态链接库 (DLL)(如 Win32 API 中的 DLL)中实现的非托管函数。 此服务将查找并调用导出的函数,然后根据需要跨越互用边界封送其参数(整数、字符串、数组、结构等)。 有关此服务的更多信息,请参见平台调用详解

本节将介绍几项与使用非托管 DLL 函数相关联的任务。 除了下列任务之外,还包括一般注意事项以及一个用于提供附加信息和示例的链接。

使用导出的 DLL 函数

  1. 标识 DLL 中的函数

    最低限度上,必须指定函数的名称和包含该函数的 DLL 的名称。

  2. 创建用于容纳 DLL 函数的类

    可以使用现有类,为每一非托管函数创建单独的类,或者创建包含一组相关的非托管函数的一个类。

  3. 在托管代码中创建原型

    [Visual Basic] 使用带 Function 和 Lib 关键字的 Declare 语句。 在某些少见的情况下,可以使用带 Shared Function 关键字的 DllImportAttribute。 这些情况在本节后面部分进行说明。

    [C#] 使用 DllImportAttribute 标识 DLL 和函数。 用 static 和 extern 修饰符标记方法。

    [C++] 使用 DllImportAttribute 标识 DLL 和函数。 用 extern "C" 标记包装方法或函数。

  4. 调用 DLL 函数

    像处理其他任何托管方法一样调用托管类上的方法。 传递结构实现回调函数属于特殊情况。

有关说明如何构造用于平台调用的基于 .NET 的声明的示例,请参见用平台调用封送数据

如何实现回调:https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-4.0/843s5s5x(v=vs.100)

托管与非托管 : https://docs.microsoft.com/zh-cn/previous-versions/dotnet/netframework-4.0/sd10k43k(v=vs.100)

转 : https://www.cnblogs.com/yezhi/articles/3209625.html

原文地址:https://www.cnblogs.com/fps2tao/p/14680975.html