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;
你可能更喜欢后者。
我在 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;
你可能更喜欢后者。