用平台调用封送数据

若要调用从非托管库导出的函数,.NET Framework 应用程序需要在托管代码中包含表示该非托管函数的函数原型。 若要创建使平台调用能够正确封送数据的原型,您必须执行以下操作:

  • DllImportAttribute 特性应用于托管代码中的静态函数或方法。

  • 用托管数据类型替换非托管数据类型。

可以使用随非托管函数提供的文档来构造等效的托管原型,方法是通过它的可选字段来应用特性并用托管数据类型替换非托管类型。 有关如何应用 DllImportAttribute 的说明,请参见使用非托管 DLL 函数

本节提供了一些示例,演示如何创建托管函数原型以便向由非托管库导出的函数传递参数以及从这些导出的函数接收返回值。 这些示例还演示何时使用 MarshalAsAttribute 特性和 Marshal 类显式封送数据。

本节内容

  • 平台调用数据类型
    提供托管数据类型及其相应的非托管数据类型的列表。

  • PinvokeLib.dll
    提供定义 Pinvoke.dll 所提供的库函数的代码。

  • 封送字符串
    描述如何通过值、通过引用、在结构中、在类中和在数组中传递字符串。

  • 封送类、结构和联合
    描述如何通过值传递类,如何传递各种结构以及如何传递具有值和混合类型的联合。

  • 封送类型数组
    描述如何通过值传递多维整数数组以及如何通过引用传递一维数组。

  • 其他封送处理示例
    描述影响互操作封送处理行为的垃圾回收和线程处理的各个方面。

相关章节