2010-03-31 113 views
3

我有一個C#結構來代表一個直角載體,是這樣的:結構元帥向非託管陣列

public struct Vector 
{ 
    private double x; 
    private double y; 
    private double z; 

    //Some properties/methods 
} 

現在我有一個非託管的C DLL,我需要的P/Invoke調用。有些方法需要雙[3]參數。

的託管C簽名是一樣的東西

void Cross(double a[3], double b[3], double c[3]); 

有什麼辦法建立的P/Invoke簽名,所以我可以通過我的矢量結構的情況下,透明的元帥他們非託管雙[3]?我還需要雙向編組,因爲非託管函數需要將輸出寫入參數數組,所以我想我需要編組爲LpArray。

回答

4

你可以躺在你的P/Invoke聲明,成員將在所有當前CPU架構上正確對齊,以便作爲非可管理代碼中的陣列進行讀取:

[DllImport("blah.dll")] 
private static extern void Cross(ref Vector a, ref Vector b, ref Vector c); 
+0

哎呀...太簡單了!它工作得很好。非常感謝 – Pedro 2010-03-31 15:28:06

0

我沒有我的編譯器的手,但我不知道你是否可以使用類似

[MarshalAs(...)] 
[StructLayout(LayoutKind::Sequential, Pack=1)] 
public struct Vector 
{ 
    private double x; 
    private double y; 
    private double z; 

    //Some properties/methods 
} 

hereherehere