gpt4 book ai didi

C++ 库中的 C# 枚举

转载 作者:可可西里 更新时间:2023-11-01 18:39:00 24 4
gpt4 key购买 nike

我在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com