0

私はP/Invokeを使用して最初のステップを実行し、これらのC /C++構造体を表現しようとしています。

#ifndef struct_emxArray_char_T_1024
#define struct_emxArray_char_T_1024
struct emxArray_char_T_1024
{
    char_T data[1024];
    int32_T size[1];
};

#ifndef typedef_e_struct_T
#define typedef_e_struct_T
typedef struct
{
    emxArray_char_T_1024 value1;
    real_T value2;
    uint32_T value3;
    boolean_T value4;
} e_struct_T;

これをC#で使用する:

[StructLayout(LayoutKind.Sequential)]
class emxArray_char_T_1024
{
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
    public string data;
    [In, MarshalAs(UnmanagedType.I4)]
    public int size;
}

StructLayout(LayoutKind.Sequential)]
class e_struct_T
{
    emxArray_char_T_1024 value1;
    double value2;
    uint value3;
    bool value4;
}

これで十分に見えますか?チュートリアルのこのようなコメントについてはよくわかりません。

compile with: /target:module

PS:

上記の「タイプ」は次のように定義されているようです。

typedef double real_T;
typedef unsigned int uint32_T;
typedef unsigned char boolean_T;
typedef char char_T;
typedef int int32_T;
4

1 に答える 1

1

最終的な構造体は私には問題ないように見えます。あなたboolean_Tがすべき唯一の変更は、マーシャリングの方法です。デフォルトのCスタイルboolは1バイトの符号付き整数であるため、としてマーシャリングする必要がありますI1。あなたはboolean_Tそれを次のunsigned charように宣言しましたU1

[StructLayout(LayoutKind.Sequential)]
class e_struct_T
{
    emxArray_char_T_1024 value1;
    double value2;
    uint value3;

    [MarshalAs(UnmanagedType.U1)] 
    bool value4;
}
于 2012-12-02T11:24:14.630 に答える