eine Struktur mit einer IDispatch Methode übergeben
-
12-10-2019 - |
Frage
In einer dritten Partei COM Module Ich habe eine Struktur auf eine Methode zu übergeben.
Die wichtigen Teile der IDL-Definition wie folgt aussehen:
interface ITheirInterface : IDispatch {
[id(0x0000012d)]
HRESULT TheirMethod([in] TheirStruct Attributes);
};
struct TheirStruct {
BSTR TheirFieldA;
BSTR TheirFieldB;
} TheirStruct;
ich, wie rufe ich die Methode von C ++ das ATL verwenden?
CComPtr<IDispatch> comPtr;
comPtr.CoCreateInstance(L"theirModule.TheirCoClass");
CComVariant returnValue;
CComVariant attribute= I_DO_NOT_KNOW_WHAT_TO_PLACE_HERE;
comPtr.Invoke1(T2COLE(L"TheirMethod"),&attribute,&returnValue);
Lösung
COM-Automatisierung Unterstützung für Strukturen ist sehr schwach, CComVariant unterstützt es nicht direkt. Sie müssen IRecordInfo verwenden und eine Variante des Typs VT_RECORD zu erstellen. Beziehen Sie die IRecordInfo Schnittstelle Zeiger von GetRecordInfoFromTypeInfo oder GetRecordInfoFromGuids. Viel Glück.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow