将 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 不,我想访问整个字符串。在这种情况下 results 和 isPA. 【参考方案1】:像Thinh Tran 建议的那样使用 SafeArray 就可以了。
代码可以在这里找到:codeproject 在“传递字符串数组”段落中。
【讨论】:
以上是关于将 C# 字符串数组传递给 C++的主要内容,如果未能解决你的问题,请参考以下文章
将 c++ dll 的 char 指针数组传递给 c# 字符串
将可写 StringBuilder 数组从 C# 传递给 C++