关于c ++ cli:如何在C#代码中使用c / c ++结构?

How to use c/c++ struct in C# code?

我正在使用一些使用UDP向我发送字节数组的服务。这个服务应用程序是用C语言开发的,这个字节数组是一个C结构。

我知道我可以在C上重新定义这个结构,并使用structLayout属性使成员具有相同的对齐方式(对吗?)

但是,是否有可能使用托管C++/CLI定义相同的结构,并将这个托管C++代码导入到我的C语言项目中,并以此方式进行序列化?

如果可能的话-那么怎么做呢?我在谷歌上找不到任何例子。


不,这对你没有帮助。C++/CLI还区分了一个本地结构(EDCOX1,0个关键字)和一个托管结构(EDCOX1,1个关键字)。您当然可以声明结构,使用include是最好的,因此您将始终使用C声明,甚至可以强制它使用#pragma make_public将结构导出到元数据中。但是C编译器只会看到一个不带任何成员的不透明值类型。

CLR为使结构的布局与C或C++编译器所使用的本机布局相同而做出了很大的努力。重要的是要使互操作有效,它使结构成为可攻击的。但它使用的规则是故意不记录的,实际上取决于结构成员的特定类型和进程的位。在不明显的情况下,它将倾向于[structlayout(layoutkind.auto)]。你可以在这里找到这样一个不幸的例子。

"有时不"子句是一个难点,编译器不能对布局做任何假设。你仍然可以通过C++的结构声明来分析C++和CLI的回报。这有助于避免事故,无论是由于托管结构声明错误,还是在C代码更改时。您必须使用public value struct关键字声明托管版本,这样C代码就可以使用它。怀疑你会认为它值得额外的项目的成本,它可能不值得。