2012-12-01 68 views
0

我想通過一個dll從C#接口的一些C/C++代碼。我不是流利的C/C++程序員,但始終使用C#。我正試圖在此刻處理這些C/C++類型:Visual Studio 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/C++試圖初始化值1如下:

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#接口,其取值爲:它初始化e_struct_T在C/C++

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

。任何反饋將非常感激。謝謝!

回答

2

線條

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

包含兩個錯誤:第一,你不能一個數組賦值給另一個,甚至沒有,如果他們是相同的尺寸。使用例如std::copy從一個複製到另一個。

另一個錯誤是size成員也是一個數組,並且您不能將單個值分配給數組。您必須分配到x.size[0]


正確的路線可以這個樣子:

std::copy(std::begin(test), std::end(test), std::begin(x.data)); 
x.size[0] = sizeof(test); 
+0

謝謝,我會看看這個。如果您覺得可以,請提供正確的代碼行嗎? – cs0815

+0

@csetzkorn當然,編輯我的答案。 –

+0

謝謝 - 明天會試試這個。 ( - : – cs0815