0

dll を介して C# からいくつかの C/C++ コードをインターフェイスしようとしています。私は流暢な C/C++ プログラマーではありませんが、常に C# を使用しています。現在、これらの 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;

それらはサードパーティのツールによって作成されました。value1 を初期化しようとして失敗した C/C++ の試みは次のとおりです。

static char_T test[5] = { 'h', 'e', 'l', 'l', 'o'};

emxArray_char_T_1024 x;
x.data = test;
x.size = 5;

e_struct_T Parameters;
Parameters.value1 = x;
Parameters.value2 = 50;
Parameters.value3 = 3;
Parameters.value4 = FALSE;

最終的に、値を取る C# インターフェイスを公開したいと思います。

PerformCPlusPlusComputation(string value1, double value2, int value3, bool value)

C/C++ で e_struct_T を初期化します。どんなフィードバックでも大歓迎です。ありがとう!

4

1 に答える 1

2

台詞

x.data = test;
x.size = 5;

には 2 つのエラーが含まれています。1 つ目は、同じサイズであっても、ある配列を別の配列に割り当てることはできないということです。たとえばstd::copy、一方から他方にコピーするために使用します。

もう 1 つのエラーは、sizeメンバーも配列であり、単一の値を配列に割り当てることができないことです。に割り当てる必要がありx.size[0]ます。


正しい行次のようになります。

std::copy(std::begin(test), std::end(test), std::begin(x.data));
x.size[0] = sizeof(test);
于 2012-12-01T16:17:40.830 に答える