Ich habe eine struct
in nativem C++, die an ein COM-Objekt übergeben werden sollte; Beide haben dieselbe Header-Datei und daher gibt es keinen Unterschied in der Strukturdefinition zwischen dem COM-Objekt und meinem Code. Die COM-Methode erwartet als Parameter einen Zeiger auf struct
. Ich bin in der Lage, Typen wie int, float, string usw. als Parameter an COM zu übergeben, indem ich sie in Varianten wie variant_t vtArg(myIntValue)
umwandle. Wie kann ich struct
in eine Variante umwandeln?Wie konvertiert man benutzerdefinierte Struktur zu Variante in C++?
Die Unterschrift der COM-Methode ist wie folgt:
bool ComMethod(HANDLE *myHandle, MyStruct *myStruct)
Dies ist, wie ich Argumente für die COM-Methode konstruieren:
SAFEARRAY *pMethodArgs = SafeArrayCreateVector(VT_VARIANT, 0, 2);
LONG index = 0;
SafeArrayPutElement(pMethodArgs, &index, &myHandle);
index = 1;
SafeArrayPutElement(pMethodArgs, &index, &myStruct);
Klingt, als ob Sie natives C++ auf beiden Seiten des COM-Aufrufs haben ... warum COM überhaupt verwenden? – Niall
Es gibt mehrere Dinge auf Anwendungsebene beteiligt. Also, es ist ein COM-Anruf. –
Es gibt das 'PVOID byref;' Mitglied, das Sie verwenden können. Aber es ist mehr als wahrscheinlich dann inkompatibel mit dem verbleibenden Nicht-C- und Nicht-C++ - Code in der COM-Anwendung. Das Beste kann sein, den ganzen Weg zu gehen und die Struktur in ein anderes COM-Objekt einzubinden ... – Niall