Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 30-09-2008 08:02:21

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

[RESOLU] Powerbuilder et objets COM

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 :

Code:

[id(0x0000000b), propget, helpstring("property ErrorCode")]
unsigned long ErrorCode();

J'ai essayé la syntaxe suivante, dans [Global external functions], sous PowerBuilder :

Code: pb

FUNCTION long ErrorCode(string szFileName) LIBRARY  "CSRPicDEC.dll" ALIAS FOR "ErrorCode;Ansi" // test

Code: pb

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

 

#2 30-09-2008 08:52:01

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Powerbuilder et objets COM

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) :

Code: pb

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

 

#3 30-09-2008 08:54:24

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Powerbuilder et objets COM

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

 

#4 30-09-2008 09:07:31

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Powerbuilder et objets COM

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

 

#5 30-09-2008 09:18:20

Nyphel  
Membre Power Geek
Lieu: Grenoble
Date d'inscription: 06-05-2008
Messages: 253
Pépites: 12
Banque: 529,705,333,097,693

Re: [RESOLU] Powerbuilder et objets COM

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

 

Pied de page des forums

Propulsé par FluxBB 1.2.22