如何使用设置为ByValTStr的字符串复制结构

问题描述

我有一个类似于以下内容的结构:

[StructLayout(LayoutKind.Explicit,Size = 17,CharSet = CharSet.Ansi)]
public struct MyStruct
{
    [MarshalAs(UnmanagedType.ByValTStr,SizeConst = 17)]
    [FieldOffset(0)] public string myString;
}

但是,当我使用Marshal.copy(...)复制该结构以对其进行测试时,输出的字符串看起来像是null还是空。

MyStruct myStruct = new MyStruct { myString = "Hello,World!" };

byte[] bytes = new byte[Marshal.SizeOf(typeof(MyStruct))];

GCHandle handle = GCHandle.Alloc(myStruct,GCHandleType.Pinned);

Marshal.copy(handle.AddrOfPinnedobject(),bytes,Marshal.SizeOf(typeof(MyStruct)));

handle.Free();

handle = GCHandle.Alloc(bytes,GCHandleType.Pinned);

myStruct = Marshal.PtrToStructure<MyStruct>(handle.AddrOfPinnedobject());

handle.Free();

myStruct.myString读为null。 我是否想念某些东西(可能很明显)?

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)