5
我在C#定義兩個接口,如下:C#派生接口可以不是在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();
}
在C++代碼,我使用下面的命令導入通過上述接口所產生的TLB
#import "device.tlb" raw_interfaces_only
創建的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;
};
我希望IRADevice從IRADevice不是產生於IDispa tch,幷包含FA功能。有人可以告訴我我做錯了嗎?
您是否試圖從派生接口(IRADevice2)中刪除InterfaceType屬性? – alexm
這是CLR對COM互操作支持的一個衆所周知的限制。您需要將導出的接口扁平化,只需重複IRADevice中的方法即可。把它們放在IRADevice2特定方法之前的順序中。 –
我試圖從派生接口(IRADevice2)中刪除InterfaceType屬性,不起作用。 –