システム呼び出しに渡されるデータ領域が小さすぎます.(異常はHRESULT:0 x 800707 Aより)
背景:
C#コードでは、構造体を文字配列に変換する必要があります.
構造の形式は次のようになります.
独自の構造体変換関数を呼び出し、文字配列形式に変換
ただし、システム呼び出しに渡されるデータ領域が小さすぎるというエラーが表示されます.(異常はHRESULT:0 x 800707 Aから)エラーメッセージは:Marshal.StructureToPtr(structObj, structPtr, true); メソッド
エラー:
ネットでいくつかの材料を探して、似たような状況もあることを発見しました.英語を変換するときは間違いはありませんが、中国語を変換すると間違いが発生します.
テストしてみたが、やはりそうだった.プログラムは中国語名を使う必要があるので、英語でこのエラーメッセージは表示されません.
エラーの原因:
構造体レイアウトの場合、unicode符号方式であることは明示されていないため、構造体をStructToPtr()メソッドに転送する際にエラーが発生する
解決策:
StructLayOut特性を用いて構造体を定義し,その符号化方式をunicode符号化方式とする(CharSet属性を設定することで実現する)
修正後の構造体の定義は次のとおりです.
C#コードでは、構造体を文字配列に変換する必要があります.
構造の形式は次のようになります.
struct usrInfo
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] name;
public int ID;
}
独自の構造体変換関数を呼び出し、文字配列形式に変換
ただし、システム呼び出しに渡されるデータ領域が小さすぎるというエラーが表示されます.(異常はHRESULT:0 x 800707 Aから)エラーメッセージは:Marshal.StructureToPtr(structObj, structPtr, true); メソッド
エラー:
ネットでいくつかの材料を探して、似たような状況もあることを発見しました.英語を変換するときは間違いはありませんが、中国語を変換すると間違いが発生します.
テストしてみたが、やはりそうだった.プログラムは中国語名を使う必要があるので、英語でこのエラーメッセージは表示されません.
エラーの原因:
構造体レイアウトの場合、unicode符号方式であることは明示されていないため、構造体をStructToPtr()メソッドに転送する際にエラーが発生する
解決策:
StructLayOut特性を用いて構造体を定義し,その符号化方式をunicode符号化方式とする(CharSet属性を設定することで実現する)
修正後の構造体の定義は次のとおりです.
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
struct usrInfo
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)]
public char[] name;
public int ID;
}