我的問題是,我正在使用C#的MATLAB API,這是給我麻煩的功能。正確的返回值與PInvoke char **(C - > C#)
C代碼:
EXTERN_C char ** matGetDir(MATFile * pMF, int *num);
我預計這個工作,但遺憾的是它不(C#代碼):
[DllImport("libmat.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern string[] matGetDir(IntPtr matFile, ref int num);
如果我把IntPtr
代替string[]
我可以調用函數,但後來我不知道如何將代碼從IntPtr
轉換爲string[]
編輯1:
我也嘗試過使用這些屬性,但它失敗並顯示錯誤:無法封送'返回值':託管/非託管類型組合無效。
[return: MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPStr)]
private static extern string[] matGetDir(IntPtr matFile, ref int num);
考慮到C中的'char'是一個字節,而C#中的'char'是兩個字節。 –
在這裏可以找到更多的信息:[鏈接](http://www.codeproject.com/Articles/17450/Marshal-an-Array-of-Zero-Terminated-Strings-or-Str) –