Den*_* Lu 5 c# c++ com import interface
我在C#中定义了两个接口,如下所示:
[Guid("4938540B-3DB2-452c-A061-59EC499657E7")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IRADevice
{
Void FA();
}
/// <summary>
/// IRADevice interface represents a given RADevice.
/// </summary>
[Guid("4938540B-3DB2-452c-A061-59EC499657E8")]
[InterfaceType(ComInterfaceType.InterfaceIsDual)]
public interface IRADevice2 : IRADevice
{
void FB();
}
Run Code Online (Sandbox Code Playgroud)
在c ++代码中,我使用以下命令导入上面接口生成的tlb
#import "device.tlb" raw_interfaces_only
Run Code Online (Sandbox Code Playgroud)
创建的tlh文件如下:
struct __declspec(uuid("4938540b-3db2-452c-a061-59ec499657e7"))
IRADevice : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall FA ( ) = 0;
};
struct __declspec(uuid("4938540b-3db2-452c-a061-59ec499657e8"))
IRADevice2 : IDispatch
{
//
// Raw methods provided by interface
//
virtual HRESULT __stdcall FB ( ) = 0;
};
Run Code Online (Sandbox Code Playgroud)
我希望IRADevice来自IRADevice而不是来自IDispatch,并且包括FA功能.谁能告诉我哪里做错了?
正如@HansPassant 所说,这是一个已知的限制。我花了一分钟时间,但我找到了一些相关文档来支持这一事实。http://msdn.microsoft.com/en-us/library/aa645736(v=vs.71).aspx
\n\n最相关的部分是:
\n\n在 C# 中声明的 COM 接口必须包含其基接口的所有成员的声明,但 IUnknown 和 IDispatch \xe2\x80\x94 的成员除外,.NET Framework 会自动添加这些成员。从 IDispatch 派生的 COM 接口必须使用 InterfaceType 属性进行标记。
\n