【发布时间】:2022-01-12 09:48:53
【问题描述】:
我想读取一个带有结构的 MemoryMappedFile。字符串位于此文件中。所以我创建了一个这样的结构:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct MemMappedFile
{
[...]
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
public string SomeString;
[...]
}
我得到了错误
System.ArgumentException: The specified Type must be a struct containing no references.
据我了解,字符串是一种引用类型,但封送处理应该管理它,但它没有 - 可能我用错了。
如何在结构中使用字符串,它只需要超出值类型?
【问题讨论】:
-
你是如何使用结构体的?
-
从我在 SO 上的相关问题中读到的内容来看,规范的解决方案似乎是使用适当大小的
byte[]并使用 Encoding.GetBytes/GetString 编码/解码您的字符串。 -
用字节数组表示字符串。
-
我想我需要为此使用不安全的上下文?
-
@SohaibJundi 该结构用于读取带有 MemoryMappedViewAccessor 的 MemoryMappedFile。因此它需要知道结构体的正确大小并引发错误。
标签: c# string struct value-type reference-type