在 C# 中元帅 C++ wchar_t**

Posted

技术标签:

【中文标题】在 C# 中元帅 C++ wchar_t**【英文标题】:Marshal C++ wchar_t** in C# 【发布时间】:2014-08-11 14:47:01 【问题描述】:

在 C++ 库代码中我有:

bool __stdcall functionName(const wchar_t** fileNames)

在我的 C# 程序中,这个函数必须得到一个字符串数组(文件名)。 如何在 C# 中调用它? 谢谢!

【问题讨论】:

您是否尝试使用带有string[] 参数的P/Invoke?以及如何传递数组的大小? @LucasTrzesniewski 是的,我试试。我收到有关不平衡堆栈的错误消息。该函数还有另一个参数“size_t namesCount”,它传递数组的大小。我只是试图简化问题:) 【参考方案1】:

尝试明确指定编组:

[DllImport("mylibrary.dll", CallingConvention = CallingConvention.StdCall)]
static extern bool functionName(
    [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPWStr)] string[] fileNames,
    int length);

【讨论】:

以上是关于在 C# 中元帅 C++ wchar_t**的主要内容,如果未能解决你的问题,请参考以下文章

C# 中的元帅 C++“char**”

具有对 C# 的整数引用的元帅结构

c# 中的元帅 char[][LENGTH]

通过套接字从 C++ wchar_t 到 C# char

元帅浮点*到 C#

C# 中的元帅“char *”