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