.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)时候甚至会乱码,像这样:
3.0 之后直到 5.0 则都可以正常显示。这又是个什么奇怪的问题…
多谢各位大佬的赐教!
