Tengo dos interfaces definidas en C#, como abajo:C# interfaz derivada no puede funcionar correctamente en C++
código[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();
}
en C++, puedo importar la TLB producido por interfaz anterior usando los siguientes comandos
#import "device.tlb" raw_interfaces_only
El archivo creado tlh es la siguiente:
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;
};
espero IRADevice deriva de IRADevice no desde IDispa tch, e incluye la función FA. ¿Alguien puede decirme dónde hice mal?
¿Intentó eliminar el atributo InterfaceType de la interfaz derivada (IRADevice2)? – alexm
Esta es una limitación bien conocida en el soporte de CLR para interoperabilidad COM. Necesitarás aplanar la interfaz derivada, simplemente repite los métodos desde IRADevice. Colóquelos en el mismo orden, antes de los métodos específicos de IRADevice2. –
He intentado eliminar el atributo InterfaceType de la interfaz derivada (IRADevice2), no funciona. –