C#库中的C#Enum

时间:2016-03-23 14:40:21

标签: c# c++ enums com

我在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枚举对象有什么魔力吗?

1 个答案:

答案 0 :(得分:2)

枚举非常古怪,您从C#项目获得的类型库没有TestEnum的typedef。你可以这样写它:

  [id(2), helpstring("two")]     
  HRESULT MethodTwo([in] enum TestEnum a);

请注意添加的enum关键字。或者,如果您在多个位置使用标识符或在C ++代码中需要它,则可以声明自己的typedef,将它放在接口声明之前:

  typedef enum TestEnum TestEnum;

你可能更喜欢后者。