给定以下 C API:
void foo(const char ** stringArray, size_t arrayCount);
我想在 C# 中为它创建一个 PInvoke 适配器。我可以在 C# 中进行一对一的映射,如下所示:
[DllImport("x.dll", ...)] // char set, etc. omitted
public static extern void foo(string[] stringArray, int arrayCount);
我想要一个隐式的第二个参数。
// Psuedo-code
[DllImport("x.dll", ...)]
public static extern void foo(string[] stringArray,
[MarshalAs(stringArray.Length)] int arrayCount);
显然 [MarshalAs()] 部分是虚构的。
目标是 C# 调用代码如下所示:
string[] list = { "x", "y" };
foo(list);
我可以围绕 PInvoke 做一个简单的包装,但我想知道这是否是最好的方法,或者我的 PInvoke 声明是否可以直接解决?