Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je n'ai jamais utilisé d'objets OCX/OLE/COM, ni même de DLL.
Aujourd'hui je dois utiliser des outils qui me sont fournis via un jeu de DLL. Plutôt que d'appeler des fonctions basiques dans ces diverses DLL, un pbjet COM m'est aussi fournit : il dispose de fonctions de plus haut niveau, et ce sont ces dernières qui feront appel aux autres fonctions basiques des DLL.
CsPicDec class is a COM object written in C++ used to wrap functionality of the Csr_PicDEC.dll. It is used to ease the use of provided functionality of the libraries in ASPX server scripts (of the ANPR Server viewer), PowerBuilder and other applications used by the PowerBuilder application.
Je souhaite donc utiliser cet objet COM, qui porte une extension .dll
J'utilise OLEViewer, disponible en téléchargement sur ce forum, pour jeter un oeil au contenu de cet objet COM. Prenons, pour l'exemple, la méthode suivante :
[id(0x0000000b), propget, helpstring("property ErrorCode")] unsigned long ErrorCode();
J'ai essayé la syntaxe suivante, dans [Global external functions], sous PowerBuilder :
FUNCTION long ErrorCode(string szFileName) LIBRARY "CSRPicDEC.dll" ALIAS FOR "ErrorCode;Ansi" // test
integer ll_return ll_return = ErrorCode() messagebox('', string(ll_return))
Ce qui me retourne une erreur R0021 :
Error: Bad runtime function reference at line ... in ... event of object ...
Mon objet COM et mes différentes DLL ont bien été ajoutées au registre, j'ai pu le vérifier en faisant une recherche. Une référence apparait dans HKEY_CLASSES_ROOT\CLSID, et d'autres références sont visibles. Je ne saurais dire si les informations sont au bon endroit, mais en tous cas c'est la DLL de mon objet COM qui est pointée.
Je ne comprends pas comment utiliser cet objet OLE. J'ai tenté d'ajouter un OLE Object sur ma fenêtre, mais mon objet COM ne semble pas être dans la liste, Lorsque j'essaie de l'ajouter (Insert -> Control -> OLE... -> Insert control -> Register new... -> CsrPicDEC.dll), et bien rien ne se passe.
Auriez-vous une idée ? Des conseils ?
Merci pour votre aide !
Dernière modification par Nyphel (30-09-2008 09:18:39)
Hors ligne
Bonjour,
On accéde au méthode d'un objet COM de la façon suivante (effectivement : il faut avoir préalablement enregistré l'objet COM dans le registre) :
OleObject ole_object ole_object = Create oleObject ole_object.connectToNewObject("class name ex : GFLAX.GFLAX") returnvalue = ole_objet.MethodeComObject(arguments1, arguments2, ...) .... DESTROY ole_object
Hors ligne
Bonjour Buck, et merci pour cette précision.
En parcourant le forum j'ai vu plusieurs fois cette syntaxe, et j'ai voulu l'utiliser... Toutefois la doc fournie avec mon objet COM ne me précise pas le class name. Je vais voir si je peux l'obtenir via OLEViewer.
Hors ligne
Bonjour,
Normalement, tu peux la retrouver en cherchant dans la base de registre. Il suffit de faire une recherche sur le nom de la DLL de l'objet COM.
Tu peux ainsi remonter au CLSID de l'objet et trouver le nom de la classe qui doit être une sous clé de HKEY_CLASSES_ROOT.
Hors ligne
Héhé merci Buck, j'ai mis tous les noms de classes possibles et imaginables jusqu'à trouver le bon ;)
Je suis tout de même rassuré de pouvoir confirmer le paramètre avec les données du registre !
Je commence maintenant à y voir plus clair, car jusque là je ne savais pas si je devais me connecter directement à la DLL via les global external functions, si je devais insister du côté des OCX, ou faire comme tu m'a conseillé. Je vais pouvoir commencer à exploiter l'objet COM, merci encore Buck.
Hors ligne