Windows HIVEファイルからベースブロックを読み込もうとしています。ファイルの最初の4バイトに "regf"というマジックナンバーが含まれています。この文字列はANSIですが、ユニコード文字列もあります。 MarshalAs属性を指定し、タイプをByValTStrに設定すると、正常に動作しますが、ユニコード文字列は読み取られません。 MSDNによると、ByValTStrを使用すると、配列の型は格納する構造体の文字セットによって決まります。問題は、文字セットを構造全体に対してUnicodeに設定した場合、マジックナンバー(最初の4バイト)を読み取ることができないことです。構造体をマーシャリングし、ansiとunicodeの両方をマーシャリングします
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string MagicNumber;
構造全体ではなく、特定の文字列の文字セットを変更するにはどうすればよいですか?
LPStrタイプも使用しようとしていますが、全く動作しません。代わりに「REGF」私は読めない文字を取得するマジックナンバーのmarshalignこのタイプの
[MarshalAs(UnmanagedType.LPStr, SizeConst = 5)]
public String MagicNumber;
。
これを修正するにはどうすればよいですか?
ありがとうございます。代わりにByValArray
として
文字列だけで余分な構造体を見せかけることで、これを行うことができます。ここでは動作しません。ゼロ終端文字列ではありません。 byte []またはint32としての整列化は正しいです。それは数字です。 –