0

アンマネージ C++ に渡すために C# で構造体を構築しようとしていますunichar。構造体の配列に使用する変数の正しい型と、それをどのようにマーシャリングする必要があるのか​​ 疑問に思っていました。

私はすでにこれを理解していますunsigned char array

C/C++

typedef struct _foo {
    void *fileId;
    unsigned char   fileName[15];
} foo;

C#

[StructLayout(LayoutKind.Sequential)]
public struct foo
{
   public IntPtr fileId;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
   public string fileName;
}

したがって、C ++で次のものがあれば

typedef struct _foo {
    void *fileId;
    unichar fileName[15];   //  UTF-16LE
} foo;

C# で使用する正しい構造体は何ですか?

4

2 に答える 2

0

構造体を unicode 構造体として指定します。

[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct foo
{
   public IntPtr fileId;
   [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 15)]
   public string fileName;
}
于 2011-06-27T09:45:16.540 に答える
0

同じことができると思いますが、プロパティをstructに設定する必要があります。そうしないと、デフォルトで になります。ただし、Windows 98 または Me (コメントなし) を使用していない限り、文字列はUnicodeとしてマーシャリングされます。DllImportAttribute.CharSetAutoAnsiUnicodeAuto

于 2011-06-27T09:42:31.407 に答える