c++ - Visual Studio C/C++ 结构字符问题

标签 c++ .net c#-4.0 visual-c++

我正在尝试通过 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;

它们是由第三方工具创建的。我不成功的 C/C++ 尝试初始化 value1 如下:

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# 接口(interface):

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

关于c++ - Visual Studio C/C++ 结构字符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13661182/

相关文章:

c++ - C/C++ 中的 bool 是什么?关键字还是宏?

c# - 如何配置WCF向客户端推送实时数据?

javascript - 以编程方式更改默认 PDF 阅读器?

c++ - 使用命名空间的范围

c++ - 具有通用获取/设置实现的类属性树数据结构的框架/库?

c++ - Netbeans 7.1.1 中的 boost

.net - Silverlight 支持的编解码器

c# - 公开一个类作为 STA COM

c# - 在 C# 中将 HTTP Accept 和 Content-Type header 都设置为 "application/xml"

javascript - 仅打印选定的元素/页面