2016-08-02 94 views
0

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); 
+0

Klingt, als ob Sie natives C++ auf beiden Seiten des COM-Aufrufs haben ... warum COM überhaupt verwenden? – Niall

+0

Es gibt mehrere Dinge auf Anwendungsebene beteiligt. Also, es ist ein COM-Anruf. –

+0

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

Antwort

0

ich mehr Möglichkeiten ausprobiert und festgestellt, dass es nicht möglich ist, um MyStruct als Parameter zu senden. Ich habe die COM-Methode eine Instanz von MyStruct zurückgegeben und versucht, den Rückgabewert in C++ zurückzuentwickeln, aber leider wurde bei C++ nichts empfangen. Die Lösung besteht darin, einen SAFEARRAY von VARIANT mit einzelnen Mitgliedern der Struktur zu erstellen, oder die einzelnen Mitglieder als separate Parameter zu übergeben.