我在C ++界面中使用C#中定义的public enum
时遇到问题。 .NET项目向COM公开,以便在C ++和VB遗留软件中使用。
C#代码:
namespace ACME.XXX.XXX.XXX.Interfaces.Object
{
[Guid(".....")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
[ComVisible(true)]
public interface TestInterface
{
void Stub();
}
[ComVisible(true)]
public enum TestEnum
{
a = 1,
b = 2
}
}
C ++代码:
编辑:在我导入tlb的项目的idl中。 (importlib("\..\ACME.XXX.XXX.XXX.Interfaces.tlb")
)
interface ITestObject : IDispatch
{
[id(1), helpstring("one")]
HRESULT MethodOne([in] TestInterface *a);
[id(2), helpstring("two")]
HRESULT MethodTwo([in] TestEnum a);
}
在MethodTwo
中,我一直收到错误陈述
在TestEnum附近排除类型规范
我假设有一些我没做错的事情。 MethodOne
似乎正确地找到了引用。
在C ++界面中引用.NET枚举对象有什么魔力吗?
答案 0 :(得分:2)
枚举非常古怪,您从C#项目获得的类型库没有TestEnum
的typedef。你可以这样写它:
[id(2), helpstring("two")]
HRESULT MethodTwo([in] enum TestEnum a);
请注意添加的enum
关键字。或者,如果您在多个位置使用标识符或在C ++代码中需要它,则可以声明自己的typedef,将它放在接口声明之前:
typedef enum TestEnum TestEnum;
你可能更喜欢后者。