将 C# 字符串数组传递给 C++

Posted

技术标签:

【中文标题】将 C# 字符串数组传递给 C++【英文标题】:Passing a C# String array to C++ 【发布时间】:2020-07-08 09:36:25 【问题描述】:

例如,我在 C# 中有一个字符串数组:

string[] level = "results","isPA"

现在我需要将此数组传递给 C++ 函数。

包装器看起来像这样:

[DllImport("File.dll", CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)

public static extern long SetJsonString(string[] Level, string Entry, string Item);

然后调用 C++ 函数:

long SetJsonString(char** Level, char* Entry, char* Item)

如果我知道想要访问数组的单个元素,我只会得到第一个元素。 有人对如何处理传球有一些想法吗?

【问题讨论】:

你问的是如何只传递第一个字符? 我不确定数组的传递方式。有两种可能 1) 在内存中如下:'abcd\0efgh\0\0 2) 从地址 1000 开始指向数据:0x00001008, 0x1000000D,abcd\0efgh\0 其中 1008 指向 abcd\0 而 100D 是指向 efgh\0。指针为 4 个字节,字节交换为 00008010 (00001008) 和 00000D10 (000100D) 在link 中使用类似 SafeArray 的建议可能会有所帮助 @John 不,我想访问整个字符串。在这种情况下 resultsisPA. 【参考方案1】:

像Thinh Tran 建议的那样使用 SafeArray 就可以了。

代码可以在这里找到:codeproject 在“传递字符串数组”段落中。

【讨论】:

以上是关于将 C# 字符串数组传递给 C++的主要内容,如果未能解决你的问题,请参考以下文章

将 c++ dll 的 char 指针数组传递给 c# 字符串

将可写 StringBuilder 数组从 C# 传递给 C++

使用 Dllimport 将一个非常大的字符串作为字节数组从 C++ 传递到 C#

通过互操作将字符串数组从 C# 传递到 C++

将 char 数组值从 C++ 传递到 C# 应用程序

将 javascript 数组传递给 c# 方法