繁体   English   中英

将字节数组从C导入C#

[英]Getting byte array from C into C#

我有以下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);

这对我最初收到“字符串”消息的测试很有效。 但是,现在我想接收打包的消息(字符/字节数组)。 问题是chars / bytes数组将为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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM