c#封送动态长度字符串
我有一个动态长度的结构:c#封送动态长度字符串,c#,.net,string,dynamic,marshalling,C#,.net,String,Dynamic,Marshalling,我有一个动态长度的结构: [StructLayout(LayoutKind.Sequential, Pack = 1)] struct PktAck { public Int32 code; [MarshalAs(UnmanagedType.LPStr)] public string text; } 通过此代码将字节[]转换为结构时: GCHandle handle = GCHandle.Alloc(bytes_array, GCHa
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct PktAck
{
public Int32 code;
[MarshalAs(UnmanagedType.LPStr)]
public string text;
}
通过此代码将字节[]转换为结构时:
GCHandle handle = GCHandle.Alloc(bytes_array, GCHandleType.Pinned);
result_struct = (PktAck)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(PktAck));
handle.Free();
我有一个错误,因为struct的大小小于bytes[]的大小,“string text”是指向字符串的指针
如何使用动态字符串?
或者我只能用这样的东西:
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1000)]
upd:c结构
struct PktAck
{
int code;
char* text;
}
如果您想将此结构封送到PInvoke调用中,那么我将使用
封送
类来分配字符串
struct PktAck
{
public Int32 code;
public IntPtr text;
}
public static void Main()
{
var a = new PktAck();
a.code = 314159;
a.text = Marshal.StringToHGlobalAnsi("foo");
try
{
SomePInvokeCall(a);
}
finally
{
Marshal.FreeHGlobal(a.text);
}
}
请给我们看C
struct
。嗨,我也有同样的问题。你找到解决办法了吗?谢谢,Ofiri想把字节数组转换成这个结构,把结构转换成数组。我有一个函数可以执行此操作,但此函数在dynamic struct上不起作用。一旦您将stuct更改为使用IntPtr
而不是string
,它将具有固定大小。在此之后,Marshal.PtrToStructure
调用应该工作。这个调用应该标记为应答。否则,OP应向ellaborate提供更多信息以获得一个。