我想從Windows HIVE文件中讀取基本塊。文件的前4個字節包含「regf」幻數。這個字符串是ANSI,但也有unicode字符串。 如果我指定MarshalAs屬性並將類型設置爲ByValTStr,則它工作正常,但它不讀取unicode字符串。 MSDN說如果你使用ByValTStr,那麼數組的類型由包含結構的字符集決定。問題是如果我爲整個結構設置字符集爲unicode,那麼我無法讀取幻數(前4個字節)。結構編組,處理ansi和unicode
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string MagicNumber;
如何更改特定字符串的字符集,而不是整個結構?
我也試圖使用LPStr類型,但它根本不起作用。
[MarshalAs(UnmanagedType.LPStr, SizeConst = 5)]
public String MagicNumber;
對於這種類型的marshalign代替「regf」神奇的數字,我得到亂碼的。
如何解決這個問題?
在此先感謝。
你可以通過僞造一個額外的結構,只用字符串。在這裏不起作用,它不是以零結尾的字符串。作爲byte []或int32封送是正確的。這是一個數字。 – 2012-04-27 14:09:46