共用方式為


封送處理不同型別的陣列

這個範例示範如何傳遞下列陣列型別:

  • 以傳值方式的整數陣列

  • 以傳址方式的整數陣列,其大小可以調整

  • 以傳值方式之整數的多維陣列 (矩陣)

  • 以傳值方式的字串陣列

  • 具有整數的結構陣列

  • 具有字串的結構陣列

除非陣列是以傳址方式明確地封送處理,否則預設行為會將陣列當成 In 參數封送處理。 您可以明確套用 InAttributeOutAttribute 屬性,來改變此行為。

陣列範例使用下列 Unmanaged 函式,顯示其原始函式宣告:

  • 從 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 是自訂的 Unmanaged 程式庫,包含先前列示的函式和兩個結構變數 (MYPOINTMYPERSON) 的實作。 這些結構包含下列元素:

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

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

在這個範例中,MyPoint 和 MyPerson 結構包含內嵌型別。 設定 StructLayoutAttribute 屬性以確保成員是按照出現的順序,循序配置於記憶體中。

LibWrap 類別包含一組由 App 類別呼叫的方法。 如需傳遞陣列的特定細節,請參閱下列範例中的註解。 陣列 (其為參考型別) 預設會被當成 In 參數傳遞。 對於要接收結果的呼叫端,必須明確地來將 InAttributeOutAttribute 套用至含有陣列的引數。

請參閱

概念

封送處理型別的陣列

平台叫用資料型別

在 Managed 程式碼中建立原型