że dwa interfejsy, określone w C#, jak poniżej:C# interfejs pochodne nie mogą działać prawidłowo 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++ kodu importować TLB wytworzonego przez wyżej interfejsu pomocą polecenie
#import "device.tlb" raw_interfaces_only
utworzony plik tlh jest jak poniżej:
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;
};
Spodziewam IRADevice wywodzi IRADevice nie od IDispa tch i zawiera funkcję FA. Czy ktoś może mi powiedzieć, gdzie popełniłem błąd?
Czy próbowałeś usunąć atrybut InterfaceType z pochodnego interfejsu (IRADevice2)? – alexm
Jest to dobrze znane ograniczenie w obsłudze CLR dla współdziałania COM. Będziesz musiał spłaszczyć interfejs pochodny, po prostu powtórz metody z IRADevice. Umieść je w tej samej kolejności, przed specyficznymi metodami IRADevice2. –
Próbowałem usunąć atrybut InterfaceType z interfejsu pochodnego (IRADevice2), nie działa. –