6

簡単な質問ですが、正解は見つかりません。C構造体に128バイトのchar配列が必要です。私はこれを64ビットWindowsで実行しています。次を使用して、これをc#にマーシャリングしたいと思います。

Cコード:

typedef struct s_parameterStuct
{
    int count;
    char name[ 128 ];
} parameterStruct;

そしてc#コード:

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public class parameterStuct
{
    public int count;

    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 128)]
    public char[] name;
}

charはc#では2バイトなので、SizeConstは128または256である必要があります。どちらも正常に機能しているように見えますが、正しいのは1つだけです。

4

2 に答える 2

2

2バイトの数量64個は1バイトの数量128個と同じサイズであるため、サイズは64になります。

マーシャリングにはバイト配列を使用します。そうしないと、C文字(単一バイト)を取得するために値の分割に我慢する必要があるためです。

于 2012-08-20T21:15:40.960 に答える
0

C#のchar配列にマーシャリングする場合(理由がわからない場合)、サイズはC#側で64に設定されます。

ただし、バイト配列(サイズ128)にマーシャリングしてから、適切なText.Encoding呼び出しを使用してバイト配列を.net文字列(文字列が必要な場合)に変換する必要があります。

于 2012-08-20T21:24:22.443 に答える