gpt4 book ai didi

c# - 将字符串数组从 C++ 传递到 C#

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:47:29 24 4
gpt4 key购买 nike

我已经编写了这段运行良好的代码:
C++ 代码

extern "C"
{
const MYLIBRARY_EXPORT char* giefStrPlx(char* addon)
{
return addon;
}
}

C#代码

[DllImport("ClassLibrary1")]
private static extern IntPtr giefStrPlx(string x);

void Start()
{

IntPtr stringPtr = giefStrPlx("Huntsman");
string huntsman = Marshal.PtrToStringAnsi(echoedStringPtr);
}

在此huntsman之后包含“Huntsman”。


我的问题是对字符串数组执行类似操作的步骤。我写了下面的函数

extern "C"
{
const MYLIBRARY_EXPORT bool fillStrArray(char** lizt, int* length)
{
char* one = "one";
char* two = "two";
char* three = "three";

lizt[0] = one;
lizt[1] = two;
lizt[2] = three;

*length = 3;
}
}

然后我尝试用 C# 编写以下代码

[DllImport("ClassLibrary1")]
private static extern bool fillStrArray(ref IntPtr array, ref int length);

void Start()
{
IntPtr charArray = IntPtr.Zero;
int charArraySize = 0;
fillStrArray(ref charArray, ref charArraySize);

IntPtr[] results = new IntPtr[charArraySize];
Marshal.Copy(charArray, results, 0, charArraySize);

foreach (IntPtr ptr in results)
{
string str = Marshal.PtrToStringAnsi(ptr);
}
}

这是行不通的。所以现在我对如何完成这个有点迷茫。

最佳答案

这是我从 CLR 到 std::string 和从 std::string 到字符串 CLR 的两个辅助函数

std::string CLROperations::ClrStringToStdString(String^ str)
{
if (String::IsNullOrEmpty(str))
return "";

std::string outStr;
IntPtr ansiStr = System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(str);
outStr = (const char*)ansiStr.ToPointer();
System::Runtime::InteropServices::Marshal::FreeHGlobal(ansiStr);
return outStr;
}

String ^ CLROperations::StdStringToClr(std::string str)
{
return gcnew String(str.c_str());
}

要使用字符串列表,您需要使用 List<String^>^注意大写字符串。对于 std::string 使用的列表 std::vector<std::string>

关于c# - 将字符串数组从 C++ 传递到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32786187/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com