是否可以在C#和非托管C++之间共享枚举声明?

sea*_*n e 18 c# c++ enums native managed

有没有办法在本机(非托管)C++和(托管)C#之间共享枚举定义?

我在完全非托管代码中使用了以下枚举:

enum MyEnum { myVal1, myVal2 };
Run Code Online (Sandbox Code Playgroud)

我们的应用程序有时使用托管组件.该C#组件通过托管C++ interop dll(来自本机dll)获取枚举项值为int.(只有在需要C#组件时才会加载interop dll.)C#组件重复了枚举定义:

public enum MyEnum { myVal1, myVal2 };
Run Code Online (Sandbox Code Playgroud)

有没有办法消除重复,而无需将原生C++ DLL转换为托管dll?

jjx*_*tra 17

您可以使用单个.cs文件并在两个项目之间共享它.#include在C++上的.cs文件应该没问题.

这将是一个示例.cs文件:

#if !__LINE__    
namespace MyNamespace
{
    public 
#endif

// shared enum for both C, C++ and C#
enum MyEnum { myVal1, myVal2 };

#if !__LINE__
}
#endif
Run Code Online (Sandbox Code Playgroud)

如果你想在一个文件中有多个枚举,你可以这样做(尽管你必须暂时将public定义为C/C++没有):

#if __LINE__
#define public
#else
namespace MyNamespace
{
#endif

    public enum MyEnum { MyEnumValue1, MyEnumValue2 };
    public enum MyEnum2 { MyEnum2Value1, MyEnum2Value2 };
    public enum MyEnum3 { MyEnum3Value1, MyEnum3Value2 };

#if __LINE__
#undef public
#else
}
#endif
Run Code Online (Sandbox Code Playgroud)


Joh*_*orp 5

感谢分享!

我玩了一会儿,找到了一种方法来拥有多个枚举和常量声明而没有大量额外的行:)

// This is a valid C, C++ and C# file :)
#if __LINE__
#define public
#else
namespace MyCSharpNamespace{
#endif

    public enum MyConstant { MaxStr = 256 };
    public enum MyEnum1{ MyEnum1_A, MyEnum1_B };
    public enum MyEnum2{ MyEnum2_A, MyEnum2_B };

#if __LINE__
#undef public
#else
}
#endif
Run Code Online (Sandbox Code Playgroud)

请记住将您的文件命名为 *.cs