C#库中的C#Enum

Ste*_*gra 7 c# c++ com enums

public enum在C++接口中使用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
   }
}
Run Code Online (Sandbox Code Playgroud)

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);
}
Run Code Online (Sandbox Code Playgroud)

MethodTwo,我不断收到错误说明

在TestEnum附近除外类型规范

我假设有些东西我做得不对.MethodOne似乎正确地找到了参考.

在C++接口中引用.NET枚举对象有一些魔力吗?

Han*_*ant 2

枚举是一个相当古怪的东西,您从 C# 项目获得的类型库没有TestEnum. 你可以这样写:

  [id(2), helpstring("two")]     
  HRESULT MethodTwo([in] enum TestEnum a);
Run Code Online (Sandbox Code Playgroud)

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

  typedef enum TestEnum TestEnum;
Run Code Online (Sandbox Code Playgroud)

您可能更喜欢后者。