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);
War es hilfreich?

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
scroll top