2009-06-26 55 views
2

我有一個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 []數組中是更有意義的,但我無法實現它。如果僅僅有一個在線參考我可以用...

+0

主要技巧是您可以使用IntPtr而不是任何指針。通常使用它來代替out或ref關鍵字會更好,因爲在調用函數時可以將許多參數留空。 – arbiter 2009-06-27 10:48:00

回答