gpt4 book ai didi

c# - 从 C 获取字节数组到 C#

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:16 24 4
gpt4 key购买 nike

我需要从 C# 调用以下 C 函数:

__declspec(dllexport) int receive_message(char* ret_buf, int buffer_size);

我已经在 C# 端声明了以下内容:

[DllImport("MyCLibrary", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto, EntryPoint = "receive_message")]
public static extern int ReceiveMessage([MarshalAs(UnmanagedType.LPStr)]StringBuilder retBuf, int bufferSize);

我是这样调用函数的:

StringBuilder sb = new StringBuilder();
int len = ReceiveMessage(sb, 512);

这在我接收“字符串”消息的初始测试中运行良好。但是,现在我想接收打包消息(字符/字节数组)。问题是字符/字节数组将包含 0 并将终止字符串,因此我无法取回整个消息。有什么想法可以重构以取回字节数组吗?

最佳答案

在 jdweng 的帮助下,我将声明更改为:

[DllImport("MyCLibrary", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Auto, EntryPoint = "receive_message")]
public static extern int ReceiveMessage(IntPtr retBuf, int bufferSize);

而且,我在 C# 端分配和释放内存以及编码数据。

IntPtr pnt = Marshall.AllocHGlobal(512);
try
{
int len = ReceiveMessage(pnt, 512);
...
byte[] bytes = new byte[len];
Marshal.Copy(pnt, bytes, 0, len);
...
}
finally
{
Marshal.FreeHGlobal(pnt);
}

关于c# - 从 C 获取字节数组到 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36870581/

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