.NET中本机互操作性的代码组织

时间:2012-10-10 10:37:40

标签: c# .net pinvoke language-interoperability

我目前正在将一些本机代码移植到C#,它包含各种结构,委托,枚举和外部方法调用。

结构中的某些字段希望将某些常量应用于它们。在结构中列出常量似乎是合乎逻辑的,而不是在一个单独的位置,因为这应该保持一切有条理,但我不确定这将在编组/与本机调用的互操作性期间对结构产生什么影响。

比如说我的结构定义如下:

[StructLayout(LayoutKind.Sequential)]
public struct NATIVE_STRUCTURE
{
     public int Value;
}

此实例中的值可能需要以下常量之一

VALUE1 = 0x0001;
VALUE2 = 0x0002;

因此,我可以安全地编写这些结构:

[StructLayout(LayoutKind.Sequential)]
public struct NATIVE_STRUCTURE
{
     public int Value;

     public const int VALUE1 = 0x0001;
     public const int VALUE2 = 0x0002;
}

任何人都可以了解这在运行时如何影响代码(如果有的话)。感谢。

1 个答案:

答案 0 :(得分:2)

最好使用枚举。像这样:

[StructLayout(LayoutKind.Sequential)]
public struct NATIVE_STRUCTURE
{
    public NativeFoo FooValue;
}

public enum NativeFoo
{
   VALUE1 = 0x0001,
   VALUE2 = 0x0002,
}