ActiveQt: dynamicCall() mit Rückgabeparametern

Alles rund um die Programmierung mit Qt
Antworten
XL
Beiträge: 18
Registriert: 1. Oktober 2010 19:14

ActiveQt: dynamicCall() mit Rückgabeparametern

Beitrag von XL »

Hallo allerseits,

hat schon jemals jemand mit dynamicCall eine ActiveX-Methode aufgerufen, die Rückgabeparameter hat?

Laut Dokumentation müsste das doch funktionieren:

Code: Alles auswählen

QVariant QAxBase::dynamicCall ( const char * function, QList<QVariant> & vars )
This is an overloaded function.

Calls the COM object's method function, passing the parameters in vars, and returns the value returned by the method. If the method does not return a value or when the function call failed this function returns an invalid QVariant object.

The QVariant objects in vars are updated when the method has out-parameters.
Bei mir wird vars nicht beschrieben.

Auszug aus meinem Code:

Code: Alles auswählen

	bool bCommsOK = true;
	QVariant var1;
	var1.setValue(bCommsOK);
	QList<QVariant> listVars;
	listVars.clear();
	listVars.append(var1);
	motorPanel->dynamicCall("GetHWCommsOK(bool*)", listVars);
	bCommsOK = listVars.at(0).toBool();
Funktioniert nicht. Der Wert von bCommsOK wird nicht aktualisiert.
Liegt nicht an der speziellen Methode (GetHWCommsOK), bei anderen funktionierts auch nicht. Ohne Rückgabeparameter funktioniert alles einwandfrei.
Zum Verzweifeln ...
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Ich kenne mich mit ActiveX nicht aus und daher übersehe ich evt. irgendwas was fundamentales..
Allerdings fällt mir auf, dass du vermutlich den falschen Datentyp übergibtst: erwartet wird ein "bool*". Du jedoch übergibst mit "QVariant var1; var1.setValue(bCommsOK);" ein "bool".

Evtl. funktioniert es ja mit "QVariant var1 = qVariantFromValue(&bCommsOK)"?

hth..
XL
Beiträge: 18
Registriert: 1. Oktober 2010 19:14

Beitrag von XL »

Schönen Dank für die Antwort.
Das war es allerdings leider nicht, das hatte ich schon selbst ausprobiert und die Doku sagt ja auch
"The QVariant objects in vars are updated when the method has out-parameters."

Mittlerweile habe ich mich einmal durch die Tiefen des Source-Codes von dynamicCall() u.a. gekämpft und bin dabei auf die Stelle gestoßen an der entschieden wird, ob es sich um einen out-parameter, d.h. mit Rückgabe, handelt. Demnach ist die Schreibweise "bool*" in dem String der den Funktionsnamen angibt nicht richtig. Es müsste (wenn ich den Source-Code richtig interpretiere ...) entweder "bool&" oder "bool**" heißen. Dokumentiert ist das allerdings nicht und Beispiele findet man auch nicht. Und Googlelei liefert die gleiche/ähnliche Frage zwar noch 2-3 mal, aber jeweils ohne Lösungsantwort.
Und "bool&" funktioniert tatsächlich, hurra! Allerdings geht "bool**" anscheinend nicht.

Einige Werte auszulesen funktioniert damit nun. Bin ein bisschen stolz auf mich ... :-)

Allerdings habe ich nun noch ein weiteres Problem. Das ActiveX liefert laut Doku einen Wert vom Typ (Visual Basic) Single. Ich versuche den als Float zu lesen, aber kriege Bullshit zurück. Kann da jemand was zu sagen?
Nehme an, dass es ein Problem mit dem Datentyp ist, aber kann auch noch was mit dynamicCall sein.


PS Wie kann man einen Thread als [gelöst] kennzeichnen?
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

[gelöst] --> Einfach Titel des ersten Posts editieren :)
Rest, k.A., sorry.
Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
Antworten