Salut à tous !
Je suis en train de développer une interface Qt pour une application. J’ai réussi à résoudre les problèmes rencontrés (importer des fonctions d’une DLL, communiquer le handle d’un widget, gérer les messages Windows, utiliser des ActiveX), je bloque sur un (problème) qui est particulièrement coriace.
Je vais essayer de faire simple :
J’ai une fonction ForthGetValue, importé de ma DLL, qui prend une QString (char * en fait) et un int*.
En pratique, je l’appelle pour avoir un pointeur sur un variant, que je veux transmettre à un ActiveX.
Voici un exemple que l’on m’a donné en Delphi (et qui marche) :
Code : Delphi
var
v:^variant; // Définition d'un pointeur sur variant
add:integer; // Définition d'un entier
begin
ForthGetValue('MyData',add); // Appel de ForthGetValue, qui renvoie
// dans add l'adresse du Variant relatif
// à MyData (c'est l'adresse de add qui
// est transmise !)
v:=pointer(add); // On fait pointer v sur l'adresse
// renvoyée dans add
CWGraph1.PlotY(v^); // On appelle l'ActiveX qui dessine le
// graph pointé par v
end;
J’ai donc essayé de le traduire en C++ avec Qt, et j’ai tenté quelque chose comme ca :
Code : C++
QVariant *v = new QVariant();
int add;
forth->ForthGetValue("MyData",&add);
v->fromValue(add); // Mon variant doit prendre l'adresse dans add
coupeNI->dynamicCall("PlotY(const QVariant)",*v);
Et bien sûr, cela ne marche pas. Je pense que le problème vient de v->fromValue(add); qui ne fait pas ce que je veux.
Les valeurs données par le désinsectiseur (debugger) sont catégoriques :
(int) add = VALEUR
(QVariant) v = 0xVALEUR
(QVariant) v* = (invalid)
J’espère que mon problème est clair et que quelqu’un pourra m’aider
P.S. : Précision : à cause des problèmes ci-dessus, lors de l’appel à l’activeX, il me répond poliment que : “QAxBase: Error calling IDispatch member PlotY: Type mismatch in parameter 0”