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