关于封送的问题 你所指的IntPtr指针是In参数,还是Out参数 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://topic.csdn.net/u/20100126/13/8bb52c6b-165e-4d32-8691-bc97f7126adc.html 应该算是in吧!我是变成要相当于c++中那种结构,通过socket发送出去的。 In参数的话,你说的不定长byte数组是不成立的,传送前,你肯定知道究竟需要多长应该直接new byte[Length]就可以了,另外,C++中是参数类型是什么?LPVOID,还是LPVOID* ?如果是LPVOID,那直接传就行了,如果是LPVOID* 那必须分配非托管内存了 c++ ==> PVOIDC# ==> byte[] 我这个里面c++设计的比较特殊,没有用直接的指针,用的byte[4],直接拷贝到这里,然后前面有一个字段指定其长度, 但是byte[] 不固定长度怎么办? 你的byte[] 做为In参数,怎么会不知道长度? 以下代码示例把一个结构转换为byte数组,假定要被转换的结构是Int32,代码如下: int n = 65535; IntPtr p = Marshal.AllocHGlobal(Marshal.SizeOf(n)); Marshal.StructureToPtr(n, p, true); byte[] bytes = new byte[Marshal.SizeOf(n)]; for (int i = 0, lpByte = p.ToInt32(); i < Marshal.SizeOf(n); i++, lpByte++) { bytes[i] =(byte) Marshal.PtrToStructure((IntPtr)lpByte, typeof(byte)); } Marshal.DestroyStructure(p,typeof(int)); Marshal.FreeHGlobal(p);此时的bytes是Int32 n的byte数组 CD msgToSend = new CD(); ... IntPtr MsgToSendbuffer = Marshal.AllocCoTaskMem(msgToSendLen); Marshal.StructureToPtr(msgToSend, MsgToSendbuffer, false); byte[] byteToSend = new byte[msgToSendLen]; Marshal.Copy(MsgToSendbuffer, byteToSend, 0, msgToSendHeadLen);把struct变成byte[]通过这个就可以实现了。 我的问题是我的这个struct中有一个指针,每次指向都是不固定长度的另一个结构,我如何序列化。我现在已经通过把每个结构变成byte[],然后再把数组按顺序接起来实现了,但我还是想了解有没有更好的方法。 菜鸟 问个对大家来说比较弱智的问题,什么是[线程安全的]啊. 有关C#调用C++非托管代码的问题,急 关于winform打印报表的问题。 数据库问题 C#和数据库 关于DialogResult.OK的问题 在线 c#字符串提取的问题。 求助: 4个checkbox获取值得问题 WPF有没有办法可以对一个窗体整体缩小呢? 请问怎么样给中文编写BASE64编码。 如何在C#项目中通过调用C++的DLL来完成字符串操作 用Itextsharp制作PDF,加水印后,水印上的表格不能显示,只显示表格内容
应该算是in吧!我是变成要相当于c++中那种结构,通过socket发送出去的。
应该直接new byte[Length]就可以了,另外,C++中是参数类型是什么?LPVOID,还是LPVOID* ?如果是LPVOID,那直接传就行了,如果是LPVOID* 那必须分配非托管内存了
C# ==> byte[]
我这个里面c++设计的比较特殊,没有用直接的指针,用的byte[4],直接拷贝到这里,然后前面有一个字段指定其长度,
但是byte[] 不固定长度怎么办?
int n = 65535; IntPtr p = Marshal.AllocHGlobal(Marshal.SizeOf(n));
Marshal.StructureToPtr(n, p, true);
byte[] bytes = new byte[Marshal.SizeOf(n)];
for (int i = 0, lpByte = p.ToInt32(); i < Marshal.SizeOf(n); i++, lpByte++)
{
bytes[i] =(byte) Marshal.PtrToStructure((IntPtr)lpByte, typeof(byte));
}
Marshal.DestroyStructure(p,typeof(int));
Marshal.FreeHGlobal(p);
此时的bytes是Int32 n的byte数组
...
IntPtr MsgToSendbuffer = Marshal.AllocCoTaskMem(msgToSendLen); Marshal.StructureToPtr(msgToSend, MsgToSendbuffer, false); byte[] byteToSend = new byte[msgToSendLen]; Marshal.Copy(MsgToSendbuffer, byteToSend, 0, msgToSendHeadLen);把struct变成byte[]通过这个就可以实现了。
我的问题是我的这个struct中有一个指针,每次指向都是不固定长度的另一个结构,我如何序列化。我现在已经通过把每个结构变成byte[],然后再把数组按顺序接起来实现了,但我还是想了解有没有更好的方法。