Ich habe zwei Schnittstellen in C# definiert ist, wie folgt:C# abgeleitete Schnittstelle kann nicht einwandfrei in C++ arbeiten
[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++ Code, importieren I der TLB von oben Schnittstelle erzeugt folgenden Befehl
#import "device.tlb" raw_interfaces_only
Die erstellte tlh Datei ist wie folgt:
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;
};
ich erwarte IRADevice von IRADevice leitet sich nicht von IDispa tch und beinhaltet FA-Funktion. Kann mir jemand sagen, wo ich falsch gemacht habe?
Haben Sie versucht, das InterfaceType-Attribut von der abgeleiteten Schnittstelle (IRADevice2) zu entfernen? – alexm
Dies ist eine bekannte Einschränkung der CLR-Unterstützung für COM-Interop. Sie müssen die abgeleitete Schnittstelle reduzieren, wiederholen Sie einfach die Methoden von IRADevice. Setzen Sie sie in die gleiche Reihenfolge, vor den IRADevice2-spezifischen Methoden. –
Ich habe versucht, InterfaceType-Attribut von der abgeleiteten Schnittstelle (IRADevice2) zu entfernen, funktioniert nicht. –