Windows HIVE 파일에서 기본 블록을 읽으려고합니다. 파일의 처음 4 바이트는 "regf"매직 넘버를 포함합니다. 이 문자열은 ANSI이지만 유니 코드 문자열도 있습니다. MarshalAs 특성을 지정하고 형식을 ByValTStr로 설정하면 올바르게 작동하지만 유니 코드 문자열은 읽지 않습니다. MSDN에 따르면 ByValTStr을 사용하면 배열의 형식이 포함 된 구조의 문자 집합에 의해 결정됩니다. 문제는 전체 문자 세트를 유니 코드로 설정하면 마법 번호 (처음 4 바이트)를 읽을 수 없다는 것입니다.구조체 정렬, ansi 및 유니 코드 모두 마샬링
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5)]
public string MagicNumber;
전체 구조가 아닌 특정 문자열에 대한 문자 집합을 변경하려면 어떻게해야합니까?
또한 LPStr 유형을 사용하려고하지만 전혀 작동하지 않습니다.
[MarshalAs(UnmanagedType.LPStr, SizeConst = 5)]
public String MagicNumber;
"regf"매직 넘버 대신 marshalign을 사용하면 읽을 수없는 문자가 나옵니다.
어떻게 해결할 수 있습니까?
미리 감사드립니다. 대신 ByValArray
로
문자열 만 사용하여 추가 구조체를 위장하여이를 수행 할 수 있습니다. 여기서는 작동하지 않으며 0으로 끝나는 문자열이 아닙니다. byte [] 또는 int32로 마샬링하는 것이 맞습니다. 그것은 숫자입니다. –