2

我有一个 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[] 数组结尾更有意义,但我无法让它工作。如果只有我可以使用的在线参考...

4

2 回答 2

1

MSDN上有很多指南。

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

尤其是互操作助手,通常使这变得非常容易。

于 2009-06-26T23:53:38.870 回答
0

http://pinvoke.net/default.aspx/misc.Suggested%20Reading

于 2009-06-26T22:54:20.927 回答