2012-07-30 68 views
3

是否可以从C dlls中导入C#结构体定义?重用C中C的结构体#

在我看到的所有例子中,都重新定义了C#中的结构。如果结构发生变化呢?我需要在我的项目的两个位置改变......

struct MyCStruct 
{ 
    unsigned long A; 
    unsigned long B; 
    unsigned long C; 
}; 

,并在C#:

[StructLayout(LayoutKind.Sequential)] 
    internal struct MyCStructAgain 
    { 
     public uint A; 
     public uint B; 
     public uint C; 
    } 

如果这是不可能重用的定义,这是为什么?

感谢

+2

_“如果无法重复使用定义,为什么会这样?”_ - 因为它是一种不同的语言? :-) – CodeCaster 2012-07-30 08:46:13

+0

因为C和C#是两种不同的语言! – 2012-07-30 08:48:10

+0

是的,但.NET使所有的语言无缝协作... – 2012-07-30 08:48:56

回答

2

你可以编译你的结构为C++/CLI在编译器生成的管理同行对你,你可以参考一下他们​​呢。你需要一个ifdef来预先赋值,使其成为一个.NET结构。

#ifdef CLIEXPORT 
#define value 
#endif 

CLIEXPORT struct MyCStruct 
{ 
    unsigned long A; 
    unsigned long B; 
    unsigned long C; 
};