gpt4 book ai didi

c# - 处理从 c++ dll 返回到 C# 的数组

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

我在用 C++ 创建的 dll 中有这个

extern "C" __declspec(dllexport)
char* __stdcall hh()
{
char a[2];
a[0]='a';
a[1]='b';
return(a);
}

这就是我尝试在 C# 中处理代码的方式

[DllImport(@"mydll.dll",CharSet = CharSet.Ansi,CallingConvention = CallingConvention.StdCall)]     
public static extern IntPtr hh();
static void Main(string[] args)
{
IntPtr a = hh();
//How to proceed here???
}


}

帮助进一步进行。

最佳答案

没有办法处理这样的数组。 char a[2] 在您的 C++ 函数中分配在堆栈上,并在您从它返回时立即销毁。您应该从 C# 传递一个数组并将其填充到 C++ 代码中,或者在堆中分配数组并提供一些释放它的方法。

当您将其改正后,处理将取决于您如何从 C++ 代码返回数据。如果它仍然是 IntPtr,您可以使用 Marshal.ReadByte 方法从内存中读取字符,并在必要时使用 Encoding 方法将这些字节转换为字符串。


const int bufferSize = 2; // suppose it's some well-known value.
IntPtr p = ...; // get this pointer somehow.
for (var i = 0; i != bufferSize; ++i)
{
var b = Marshal.ReadByte(p, i);
Console.WriteLine(b);
}

关于c# - 处理从 c++ dll 返回到 C# 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085501/

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