Ho due interfacce definite in C#, come di seguito:C# interfaccia derivato non può funzionare correttamente in C++
codice[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();
}
in C++, importare il TLB prodotto dalla interfaccia di cui sopra utilizzando seguente comando
#import "device.tlb" raw_interfaces_only
Il file tlh creato è il seguente:
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;
};
mi aspetto IRADevice deriva da IRADevice non dal IDispa tch e include la funzione FA. Qualcuno può dirmi dove ho sbagliato?
Si è tentato di rimuovere l'attributo InterfaceType dall'interfaccia derivata (IRADevice2)? – alexm
Questa è una ben nota limitazione nel supporto CLR per l'interoperabilità COM. Avrai bisogno di appiattire l'interfaccia derivata, basta ripetere i metodi da IRADevice. Mettili nello stesso ordine, prima dei metodi specifici di IRADevice2. –
Ho provato a rimuovere l'attributo InterfaceType dall'interfaccia derivata (IRADevice2), non funziona. –