gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 17:52:38 35 4
gpt4 key购买 nike

我正在尝试将数组中的一些字符串传递到我的 C++ DLL。

C++ DLL 的功能是:

extern "C" _declspec(dllexport) void printnames(char** ppNames, int iNbOfNames)
{
for(int iName=0; iName < iNbOfNames; iName++)
{
OutputDebugStringA(ppNames[iName]);
}
}

在 C# 中,我像这样加载函数:

[DllImport("MyDLL.dll", CallingConvention = CallingConvention.StdCall)]
static extern void printnames(StringBuilder[] astr, int size);<br>

然后我像这样设置/调用该函数:

List<string> names = new List<string>();
names.Add("first");
names.Add("second");
names.Add("third");

StringBuilder[] astr = new StringBuilder[20];
astr[0] = new StringBuilder();
astr[1] = new StringBuilder();
astr[2] = new StringBuilder();
astr[0].Append(names[0]);
astr[1].Append(names[1]);
astr[2].Append(names[2]);

printnames(astr, 3);

使用 DbgView,我可以看到一些数据被传递到 DLL,但它打印出垃圾而不是“第一”、“第二”和“第三”。

有什么线索吗?

最佳答案

使用 String[] 而不是 StringBuilder[]:

[DllImport("MyDLL.dll", CallingConvention = CallingConvention.StdCall)]
static extern void printnames(String[] astr, int size);

List<string> names = new List<string>();
names.Add("first");
names.Add("second");
names.Add("third");

printnames(names.ToArray(), names.Count);

MSDN有more info关于编码(marshal)数组。

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

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