.net core 2.2+版本,在测试时候发现的奇妙问题。测试时是在 5.0 上发现的,但是似乎所有版本.net core 都存在这个特性。
Marshal.AllocHGlobal 时, 对于 UnmanagedType.LPUTF8Str,Alloc 的是指针的指针,PtrToStructure 读取的也是指针的指针 对于 UnmanagedType.ByValTStr,Alloc 的是指针,PtrToStructure 读取的也是指针
上下 2 组,上面是 LPUTF8Str 的测试结果,下面是 ByValTStr 的。 每一组第一行是 Marshal.AllocHGlobal 的返回值,第二行是 Marshal.ReadIntPtr(前面的返回值)的值
两部分只有 MarshalAs(UnmanagedType...)的定义不同,其他部分完全一样。 究竟这里是怎么回事…
完整的测试代码在这里 https://pastebin.com/J5cUmyfm
此外,这个特性似乎还跟.net core 版本有关…2.1 之前的版本在 Console.WriteLine(utf8Struct.Value)时候甚至会乱码,像这样:
多谢各位大佬的赐教!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.