Visual Studio C/C++ struct char issue

Visual Studio C/C++ struct char issue

本文关键字:struct char issue C++ Studio Visual      更新时间:2023-10-16

我正在尝试通过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。任何反馈将不胜感激。谢谢!

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);