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.
  • Index
  •  » Powerscripts
  •  » Appel à des fonctions de DLL générées via Powerbuilder

#1 06-09-2007 14:55:59

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Appel à des fonctions de DLL générées via Powerbuilder

Bonjour à tous.

Je voudrais savoir s'il est possible d'utiliser une fonction d'une DLL générée via Powerbuilder depuis une autre application (Powerbuilder ou autre)

Je m'explique.:

Dans une application 'A', j'ai créé une Fonction 'F' enregistrée dans la librairie L,
J'ai généré l'exécutable de cette application 'A', en cochant l'option 'Generate Machine Code'
En résultat, j'ai donc un .exe (A.Exe) et une dll (correspondant à la librarie L : L.dll)

Dans une autre application PB ('B'), j'ai déclacré une 'Local External Function' faisant appel à la fonction 'F' dans la DLL L.dll

FUNCTION int fonction_name (param) LIBRARY  "L.dll" ALIAS FOR "F"

Dans un des événements d'une fenêtre de l'application 'B', j'appelle cette fonction .

Lors de l'exécution de cette application 'B', au moment où j'appelle cette fonction, j'ai un message d'erreur:
R00015 : Error calling  function pla_rues at line ...etc..

Donc, il ne retrouve pas ma fonction dans la dll.

J'ai donc vérifié le contenu de ma DLL générée. En utilisant un éditeur de DLL (où l'on voit seulement les noms de fonction et non le contenu de chacune des fonctions) il s'avère que ma fonction ne porte pas vraiment le nom donné dans Powerbuilder. Au lieu de retrouver le nom 'F', j'ai ceci: '_getVtableInfo_F@12'.
Donc, avant le F, j'ai '_getVtableInfo_' qui s'est greffé et après, j'ai le '@12'.

donc, dans ma déclaration de fonction externe, au lieu de mettre ceci:

FUNCTION int fonction_name (param) LIBRARY  "L.dll" ALIAS FOR "F"
je dois mettre
FUNCTION int fonction_name (param) LIBRARY  "L.dll" ALIAS FOR "_getVtableInfo_F@12"

Et là, à l'exécution, au moment où l'appel à la fonction se fait, tout plante, je sors de l'appli violemment.
A priori, il ne rentre même pas dans la fonction

Je n'ai pourtant aucun soucis avec l'appel à des fonctions présentes dans des DLL de Windows.

Avez-vous déjà utilisées fait appels à des fonctions présentes dans des DLL générées via PB ?
Quelqu'un a-t-il une idée pour résoudre ce problème ?
Ou alors n'est il pas possible d'utiliser une fonction de DLL PB dans une autre appli ? Dans ce cas, quel est l'intérêt de générer des DLL au lieu de PBD ?

Merci d'avance

Kalini

Dernière modification par Kalini (06-09-2007 15:20:37)

Hors ligne

 

#2 06-09-2007 15:36:57

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Appel à des fonctions de DLL générées via Powerbuilder

Bonjour, peut-être en faisant un AddToLibraryList( filelist ) avant l'appel de la fonction. (marche avec des PBD, à tester avec des DLL)


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 07-09-2007 07:57:20

Kalini  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 65
Pépites: 269
Banque: 0

Re: Appel à des fonctions de DLL générées via Powerbuilder

Merci pour ta réponse eRaSorZ
Par contre, ça implique que la Dll soit inclue dans le Target Library de l'application appelant la fonction ?

Ce qui est étrange, c'est que dans l'exemple de l'aide Powerbuilder 10.5, ils mettent :  AddToLibraryList(prod.pbd)
Moi, je suis obligé de mettre des ""  : AddToLibraryList("L.dll") sinon, apparait une erreur comme quoi il ne connait pas la variable prod.pbd, que cette library DLL soit dans le target ou non, d'ailleurs.

Dernière modification par Kalini (07-09-2007 08:13:17)

Hors ligne

 

#4 07-09-2007 10:08:51

FMolinas  
Membre Geek
Lieu: Lyon
Date d'inscription: 12-06-2007
Messages: 87
Pépites: 97
Banque: 6,435,474,948,567

Re: Appel à des fonctions de DLL générées via Powerbuilder

Selon la documentation de PB : PowerBuilder machine code DLLs cannot be called from other applications.. C'est dans Application Techniques, chapitre Packaging an Application for Deployment.

Je n'ai pas d'expérience personnelle dans ce genre d'exercice, mais il me semble que la technique "AddToLibrary" soit la seule éventuellement utilisable. Bon courage

Hors ligne

 

#5 07-09-2007 10:16:41

shahin  
Modérateur
Award: bf
Lieu: val de marne
Date d'inscription: 26-09-2006
Messages: 938
Pépites: 8,675,050,269
Banque: 16,218,225,127,617

Re: Appel à des fonctions de DLL générées via Powerbuilder

1) On peut aussi faire un serveur COM/MTS/COM+, mais quand on lit : "The PowerBuilder automation server technology may be discontinued in a future release. " ça inquiète.

2) Faire des Web services et déployer sur EAS

3) Utiliser Corba

4) Reste une technique obsolète depuis 10 ans mais qui fonctionne toujours : DDE


never let people work on more than one thing at once.

Hors ligne

 

#6 07-09-2007 11:36:17

pick ouic  
La bourse ou la vie ^^
Award: gearotter
Lieu: Massy-Verrières
Date d'inscription: 29-05-2006
Messages: 4659
Pépites: 945
Banque: 2,147,483,647
Site web

Re: Appel à des fonctions de DLL générées via Powerbuilder


Connaitre son ignorance est une grande part de la connaissance.
http://animegifs.free.fr/anime/mazinger/mazinger.gif

Hors ligne

 
  • Index
  •  » Powerscripts
  •  » Appel à des fonctions de DLL générées via Powerbuilder

Pied de page des forums

Propulsé par FluxBB 1.2.22