Powerbuilder pour les completement Geeks !

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 05-11-2010 13:28:09

dydo01  
Membre
Date d'inscription: 21-09-2010
Messages: 10
Pépites: 58
Banque: 0

Utilisation DLL C++/C avec PowerBuilder

Bonjour à tous,

je voulais juste Runner un simple exemple de PowerBuilder qui utilise une fonction externe provenant d'une DLL

en faite j'ai créer un un projet "Dynamic Link Library" avec CodeBloks dans lequel j'ai placé mon fichier "main.cpp" contenant le code C++ est le suivant :

Code:

//main.cpp
#include <windows.h>

extern "C" __declspec(dllexport) __stdcall int add(int a,int b);

extern "C" __declspec(dllexport) __stdcall int add(int a,int b)
{
  return a+b;
}

ensuite j'ai fais un build ; alors 3 fichiers ont été générés :"mydll.dll"  ,  "libmydll.dll.def"  et "libmydll.dll.a"

j'ai mis ces 3 fichiers sous le répertoire contenant mon projet PB.

j'ai créer ensuite un userobject uo_decoder dans lequel j'ai déclaré le Local External Function suivante :

Code:

FUNCTION integer somme(integer a,integer b) LIBRARY "mydll.dll" ALIAS FOR "add"

ensuite à partir de ma window PB j'ai tapé ce bout de code qui s'exécute  lors du click du bouton "Tester_Dll" :

Code:

uo_decoder decoder
decoder = create uo_decoder
MessageBox("Calcul Somme",string(decoder .somme(10,20)))

mais malheureusement un message d'erreur s'affiche :

Erreur Systeme : Error calling External Function add at line...


SVP Veuillez m'aider à faire marcher cet exemple :ccool:

Merci

Hors ligne

 

#2 05-11-2010 13:30:25

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

Re: Utilisation DLL C++/C avec PowerBuilder

Bonjour, est-ce que ça marche avec :

Code: pb

long ll_result

ll_result = somme(10,20)


Pour info, normalement tu n'as besoin que du fichier DLL.

NB :


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

Hors ligne

 

#3 05-11-2010 15:22:57

dydo01  
Membre
Date d'inscription: 21-09-2010
Messages: 10
Pépites: 58
Banque: 0

Re: Utilisation DLL C++/C avec PowerBuilder

Bonjour,

Merci pour votre réponse !

Malheureusement ça marche pas

Hors ligne

 

#4 05-11-2010 15:24:45

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: Utilisation DLL C++/C avec PowerBuilder

Code: pb

long ll_result

ll_result = add(10,20)

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

Hors ligne

 

#5 05-11-2010 16:54:43

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

Re: Utilisation DLL C++/C avec PowerBuilder

pick, il a déclaré somme PB <-> add C++

c'est quoi la correspondance int C++ avec PB ? c'est long non ? (quoique je ne pense pas que ça change qqchose)


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

Hors ligne

 

#6 05-11-2010 17:00:33

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: Utilisation DLL C++/C avec PowerBuilder

j'ai pris en compte le ALIAS FOR "add"
...peut etre que je puis parti sur une mauvaise piste.... 


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

Hors ligne

 

#7 06-11-2010 14:07:55

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

Re: Utilisation DLL C++/C avec PowerBuilder

Bonjour,

Je pense simplement que ton programme ne trouve pas la dll. Tu copies la dll dans le répertoire de ton appli qui ne fait pas partie du path système (exécution à partir de Powerbuilder, je suppose).

Pour faire un test, tu devrais copier la dll dans C:\Windows\System32 par exemple.

Hors ligne

 

#8 06-11-2010 14:42:25

dydo01  
Membre
Date d'inscription: 21-09-2010
Messages: 10
Pépites: 58
Banque: 0

Re: Utilisation DLL C++/C avec PowerBuilder

Bonjour,

Merci pour vos réponses !!!

Maintenant ça marche

En faite c'était l'alias de ma fonction, donc il faut mettre le "@numéro " dans l'alias.

dans mon cas j'aurais donc :

Code:

FUNCTION integer somme(integer a,integer b) LIBRARY "mydll.dll" ALIAS FOR "add@4"

on trouve cet alias au niveau du fichier "libDLLTEST.dll.def" généré automatiquement avec ma DLL.

Dernière modification par dydo01 (06-11-2010 14:43:40)

Hors ligne

 

#9 08-11-2010 08:33:39

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: Utilisation DLL C++/C avec PowerBuilder

Bizarre cette histoire d'allias.
Quoi qu'il en soit, Erasorz a raison. Int en pb est sur 2 octets.
Donc Int en C <=> Long en PB

Code:

FUNCTION long somme(long a,long b) LIBRARY "mydll.dll" ALIAS FOR "add@4"

CodeBloks est un IDE, pas un compilateur. Quel compilateur est associé ?
Logiquement, il devrait exporter en "add@8"
http://www.sybase.com/detail?id=44623


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

Hors ligne

 

#10 08-11-2010 10:32:58

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

Re: Utilisation DLL C++/C avec PowerBuilder

Bonjour,

Normalement, en utilisant la déclaration __declspec(dllexport) permet de s'affranchir de l'utilisation du fichier .def pour trouver la déclaration du prototype de la fonction (http://msdn.microsoft.com/fr-fr/library … 80%29.aspx).

Je pense que ce comportement est due à la copie du fichier .def avec la dll alors que seul la dll est nécessaire, la déclaration du prototype de la fonction est alors recherchée par défaut dans le fichier .def.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22