C++库中的C#枚举

7

我在使用一个在C#中定义的public enum时,在C++接口中遇到了问题。该.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++代码:

编辑:在项目的idl中,我导入了tlb。(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个回答

2

枚举是一种相当古怪的类型库,你从C#项目中获取的类型库里没有TestEnum的typedef。你可以改用以下写法:

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

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

  typedef enum TestEnum TestEnum;

你可能更喜欢后者。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接