我正在尝试从 Windows HIVE 文件中读取基本块。文件的前 4 个字节包含“regf”幻数。这个字符串是 ANSI,但也有 unicode 字符串。如果我指定 MarshalAs 属性并将类型设置为 ByValTStr 它工作正常,但它不会读取 unicode 字符串。MSDN 说如果你使用 ByValTStr,那么数组的类型由包含结构的字符集决定。问题是如果我将整个结构的字符集设置为 unicode,那么我将无法读取幻数(前 4 个字节)。
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string MagicNumber;
如何更改特定字符串的字符集,而不是整个结构?
我也在尝试使用 LPStr 类型,但它根本不起作用。
[MarshalAs(UnmanagedType.LPStr, SizeConst = 5)]
public String MagicNumber;
使用这种类型的编组而不是“regf”幻数,我会得到不可读的字符。
如何解决?
提前致谢。