WindowsのHIVEファイルからベースブロックを読み取ろうとしています。ファイルの最初の4バイトには、「regf」マジックナンバーが含まれています。この文字列はANSIですが、Unicode文字列もあります。MarshalAs属性を指定し、タイプをByValTStrに設定すると、正常に機能しますが、Unicode文字列は読み取られません。MSDNによると、ByValTStrを使用する場合、配列のタイプは、含まれている構造体の文字セットによって決定されます。問題は、構造全体で文字セットをユニコードに設定すると、マジックナンバー(最初の4バイト)を読み取ることができないことです。
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string MagicNumber;
構造全体ではなく、特定の文字列の文字セットを変更するにはどうすればよいですか?
LPStrタイプも使おうとしていますが、まったく動作しません。
[MarshalAs(UnmanagedType.LPStr, SizeConst = 5)]
public String MagicNumber;
「regf」マジックナンバーの代わりにこのタイプのマーシャラインを使用すると、判読できない文字が表示されます。
それを修正する方法は?
前もって感謝します。