我有一個C DLL,看起來像一個出口下:C#DLL的extern原型幫助
__declspec(dllexport) int Function(
char *password,
unsigned char *ssid,
int ssidlength,
unsigned char *output)
{
在C#的一面,我使用這個如下:
[DllImport("myDLL.dll", SetLastError = true)]
protected static extern int Function(
[MarshalAs(UnmanagedType.LPStr)]
string password,
[MarshalAs(UnmanagedType.LPStr)]
string ssid,
int ssidlength,
[MarshalAs(UnmanagedType.LPArray)]
byte[] output);
的上面實際上工作得很好,但花了我一段時間才弄清楚我需要什麼東西來組織。有沒有任何指南可以列出所有可能的c/cpp數據類型及其相應的C#編組?
喜歡的東西:
C => C#
的char * myVar的=> [的MarshalAs(UnmanagedType.LPStr)字符串myVar的
...
但列出的所有類型的?
我想問的原因是因爲我永遠不知道什麼時候使用「ref」或out或者IntPtr,或者什麼類型來編組東西。
最後,在上面的代碼中,我將一個指向unsigned char數組的指針作爲一個指向字符串的長指針。這看起來不正確,但它的工作原理。這對於最終在byte []數組中是更有意義的,但我無法實現它。如果僅僅有一個在線參考我可以用...
主要技巧是您可以使用IntPtr而不是任何指針。通常使用它來代替out或ref關鍵字會更好,因爲在調用函數時可以將許多參數留空。 – arbiter 2009-06-27 10:48:00