C++ 库中的 C# 枚举

C# Enum in a C++ Library

我在 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++代码:

编辑: 在项目的 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 中,我不断收到错误消息

Excepting Type Specification near TestEnum

我假设我做错了什么。 MethodOne 似乎找到了正确的引用。

在 C++ 接口中引用 .NET 枚举对象有什么神奇之处吗?

枚举相当古怪,您从 C# 项目获得的类型库没有 TestEnum 的类型定义。你可以这样写:

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

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

  typedef enum TestEnum TestEnum;

你可能更喜欢后者。