C#DLL extern原型帮助

时间:2009-06-26 22:45:40

标签: c# marshalling

我有一个带有导出的C DLL,如下所示:

__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)] string myVar
...
但列出所有类型?

我问的原因,是因为我从来不知道何时使用“ref”或out或IntPtr,或者用什么类型来编组。

最后,在上面的代码中,我将一个指向unsigned char数组的指针编组为一个指向字符串的长指针。这似乎不对,但它确实有效。最终以byte []数组结束更有意义,但我无法让它工作。如果只有在线参考,我可以使用......

2 个答案:

答案 0 :(得分:1)

MSDN上有很多指南。

话虽如此,pinvoke.netPInvoke Interop Assistant是使用本机代码的绝佳资源。

特别是互操作助理经常使这很容易。

答案 1 :(得分:0)