封送处理不同类型的数组

该示例说明如何传递以下类型的数组:

  • 通过值传递的整数数组。

  • 通过引用传递的整数数组,它可以调整大小。

  • 通过值传递的多维整数数组(矩阵)。

  • 通过值传递的字符串数组。

  • 包含整数的结构数组。

  • 包含字符串的结构数组。

除非数组是通过引用显式封送的,否则默认行为将该数组作为 In 参数进行封送处理。 可以通过显式应用 InAttributeOutAttribute 特性来更改此行为。

Arrays 示例使用以下非托管函数(这里同时显示其原始函数声明):

  • 从 PinvokeLib.dll 导出的 TestArrayOfInts

    int TestArrayOfInts(int* pArray, int pSize);
    
  • 从 PinvokeLib.dll 导出的 TestRefArrayOfInts

    int TestRefArrayOfInts(int** ppArray, int* pSize);
    
  • 从 PinvokeLib.dll 导出的 TestMatrixOfInts

    int TestMatrixOfInts(int pMatrix[][COL_DIM], int row);
    
  • 从 PinvokeLib.dll 导出的 TestArrayOfStrings

    int TestArrayOfStrings(char** ppStrArray, int size);
    
  • 从 PinvokeLib.dll 导出的 TestArrayOfStructs

    int TestArrayOfStructs(MYPOINT* pPointArray, int size);
    
  • 从 PinvokeLib.dll 导出的 TestArrayOfStructs2

    int TestArrayOfStructs2 (MYPERSON* pPersonArray, int size);
    

PinvokeLib.dll 是一个自定义非托管库,它包含前面列出的函数的实现和以下两个结构变量:MYPOINTMYPERSON。 这些结构包含以下元素:

typedef struct _MYPOINT
{
   int x; 
   int y; 
} MYPOINT;

typedef struct _MYPERSON
{
   char* first; 
   char* last; 
} MYPERSON;

在该示例中,MyPoint 和 MyPerson 结构包含嵌入类型。 StructLayoutAttribute 特性经过设置,可确保成员在内存中按它们的出现顺序依次排列。

LibWrap 类包含一组由 App 类调用的方法。 有关传递数组的特定详细信息,请参见下面的示例中的注释。 默认情况下,作为引用类型的数组被作为 In 参数进行传递。 为使调用方接收结果,必须将 InAttributeOutAttribute 显式应用于包含该数组的参数。

请参见

概念

封送类型数组

平台调用数据类型

在托管代码中创建原型