C++ 库中的 C# 枚举

标签 c# c++ enums com

我在使用 C++ 接口(interface)中以 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++ 接口(interface)中引用 .NET 枚举对象有什么魔力吗?

最佳答案

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

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

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

  typedef enum TestEnum TestEnum;

您可能更喜欢后者。

关于C++ 库中的 C# 枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36181207/

相关文章:

c# - MSChart 轴上的固定间隔

c# - MSDTC 是一个很大的资源消耗吗?

c# - LINQ 查询连接两个表并从表 B 中选择表 A 对应的最新记录

c# - 如何获取此验证码图像链接?

c++ - 将所需数据从一个 vector 移动或复制到另一个 vector

c++ - CMake 无法找到 mysqlclient 库

javascript - 如何在 Angular 5 中使用枚举

c++ - 杀死一个进程会让僵尸进程困扰我...... :(

c - 枚举和字符串

Java - 为什么不允许 Enum<E> 作为 Annotation 成员?