繁体   English   中英

使用C#PInvoke的隐式数组长度

[英]Implicit array length with C# PInvoke

鉴于以下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声明可以直接解决?

只需创建一个包装函数:

private static extern void foo(string[] stringArray, int arrayCount);

public static void foo(string[] stringArray) {
    foo(stringArray, stringArray.Length);
}

这是一个容易得多且更灵活的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM