【问题标题】:C# Enum in a C++ LibraryC++ 库中的 C# 枚举
【发布时间】:2016-07-10 22:09:24
【问题描述】:

我在 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,我不断收到错误说明

TestEnum 附近的类型规范除外

我假设有些事情我做的不对。 MethodOne 似乎找到了正确的参考。

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

【问题讨论】:

    标签: c# c++ enums com


    【解决方案1】:

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

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

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

      typedef enum TestEnum TestEnum;
    

    你可能更喜欢后者。

    【讨论】:

      猜你喜欢
      • 2010-11-26
      • 2018-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多