creation tuto DLL

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
bourdon
Messages : 5
Inscription : mer. 24/juin/2009 13:45

creation tuto DLL

Message par bourdon »

Bonjour,
Je programme des outils plutot orientés compta et math et je passe mon temps a recopier mes fonctions dans mes programmes. J'ai lu quelque part que plutot de faire ça, on pouvait creer des DLL que l'on appel pour faire les calculs demandés. J'ai regardé partout sur les aides, et ce forum et je ne trouve rien de claire à ce sujet. On est toujours dans le vague, avec des bouts de script inutilisables.
Je m'explique : j'aimerai creer une DLL qui retourne un montant de TTC grace à 2 paramtres lancé a partir de mon programme.

Voici ce que j'ai ecris :
1. ma DLL
--------------------------------------
ProcedureDLL Calcul_TTC(ht, tx)
ttc = ht * tx
ProcedureReturn ttc
EndProcedure
--------------------------------------

2.
; Voici le programme client qui utilise la DLL
-----------------------------------------------------
ht= 100
tx = 0.196
If OpenLibrary(0, "CalTTC.dll")
CallFunction(0, Calcul_TTC,ht, tx)
CloseLibrary(0)
EndIf

Debug ttc
---------------------------------------------------------
J'ai beau faire ca ne fonctionne pas !
est-ce que quelqu'un est capable de faire un petit tuto simple avec des exemple comme celui-ci tres simples mais qui fonctionne ?

Un grand merci pour ce bon sauveur.
Anonyme

Message par Anonyme »

Bonjour et bienvenu.
utilise les balise [ code ] [ /code ] pour mettre du code.

Code : Tout sélectionner

CallFunction(0, Calcul_TTC,ht, tx) 
l'erreur est ici

Calcul_TTC vaut 0 , le second paramètre demande un nom de fonction

donc

Code : Tout sélectionner

CallFunction(0,"Calcul_TTC",ht, tx) 
Ton resultat est dans le retour de la fonction donc :

Code : Tout sélectionner

RESULTAT.f = CallFunction(0, Calcul_TTC,ht, tx) 
debug RESULTAT.f 
bourdon
Messages : 5
Inscription : mer. 24/juin/2009 13:45

merci pour ta reponse mais....

Message par bourdon »

je te remercie pour ta reponse et l'attention que tu portes a ma question j'ai donc appliqué tes consignes. néanmoins le probleme subsite.
si je ne mets pas de guillemets dans l'appel de ma fonction j'ai un message d'erreur a la compitaion de mon programme car il attends un string

Code : Tout sélectionner

ht= 100
tx = 0.196
If OpenLibrary(0, "CalTTC.dll")
  RESULTAT.f = CallFunction(0, Calcul_TTC,ht, tx)
  CloseLibrary(0)
EndIf

Debug RESULTAT
est-ce que j'oublie quelque chose ?
Anonyme

Message par Anonyme »

est-ce que j'oublie quelque chose ?
Oui, les bases ;)


tu déclare tx = 0.196

tx est une variable de type integer , toi tu lui passe un float < à 1 donc , déjà lui il vaut 0. 100*0 = 0

pareil pour les fonctions , tu travail en flottant , il faut l'indiqué lors de la déclaration des variables.

DLL :
ProcedureCDLL.f Calcul_TTC(ht.f, tx.f)
ttc.f = ht * tx
ProcedureReturn ttc
EndProcedure


le code :

Code : Tout sélectionner

ht.f= 100
tx.f = 0.196


Prototype.f Calcul_TTC(ht.f, tx.f)


If OpenLibrary(0, "CallTTC.dll")
 Calcul_TTC.Calcul_TTC = GetFunction(0,"Calcul_TTC")
EndIf


Debug Calcul_TTC(ht,tx) 

ca marche ;)
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

Ah le Bator qu'il est fort :) (désolé) 8)
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: creation tuto DLL

Message par Backup »

bourdon a écrit :J'ai lu quelque part que plutot de faire ça, on pouvait creer des DLL que l'on appel pour faire les calculs demandés. J'ai regardé partout sur les aides, et ce forum et je ne trouve rien de claire à ce sujet. On est toujours dans le vague, avec des bouts de script inutilisables.

ce genre d'affirmation , m'enerve grave les nerfs !!

et la c'est quoi La ???

LE tuto numero 1

http://www.purebasic.fr/french/viewtopic.php?t=6664


yen a j'vous jure ! :roll:


pour rappel on est pas a ton service, rien ne t'empeche de bosser le sujet
et d'en faire un de Tuto
pour qu'un poireau dans ton genre te fasse remarquer quelque temps apres
que ton tuto , c'est du vague !! :?
bourdon
Messages : 5
Inscription : mer. 24/juin/2009 13:45

un grand merci a bator

Message par bourdon »

Merci tu es vraiment très sympa.
je vais essayer tous ca.


je ne prend pas la peine de répondre au dernier post qui m'insulte de poireau et autre noms d'oiseau je pense que cela n'en vaut pas la peine. A part que cela vous dégoute d'echanger avec d'autre internautes. Heureusement qu'il y a des gens inteligents qui ne se precipitent pas sur la premiere occasion possible pour faire remarquer aux autres à quel point ils sont nulls.

encore grand merci à cpl bator
bourdon
Messages : 5
Inscription : mer. 24/juin/2009 13:45

Toujours pas

Message par bourdon »

J'ai testé ton script en recopiant ta DLL et le prog.
en copier collé
mais rien à faire !
le debugger m'affiche l'erreur suivante [error] invalid memory access, (read error at adress 0)
!??? Etant vraiment tres novice en matiere de DLL, je pense que j'oublie certainement quelquechose. Encore une fois je m'en remets à ta patience.
merci
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

je ne prend pas la peine de répondre au dernier post qui m'insulte de poireau et autre noms d'oiseau je pense que cela n'en vaut pas la peine. A part que cela vous dégoute d'echanger avec d'autre internautes.
Bienvenue parmis nous 8)
Ca a pas l'air comme ça...mais c'est presque un "bienvenue" de la part de notre ami DOBRO :roll:

Il est vrai que les termes sont peut etre un peu dénués de vaseline....mais bon !!!
Tu aprendras a le connaitre, il aboit....mais il mord pas souvent.
Par contre il rend aussi de sacré services...il rammene le journal, ramasse les clefs ... :lol:

Pas d'inquietude, tu es le bienvenu ici :roll:
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Si on ne vérifie pas le succès d'une fonction, on s'expose à des crashs.

Code : Tout sélectionner

ht.f= 100 
tx.f = 0.196 


Prototype.f Calcul_TTC(ht.f, tx.f) 


If OpenLibrary(0, "CallTTC.dll") 
 Calcul_TTC.Calcul_TTC = GetFunction(0,"Calcul_TTC") 
 If Calcul_TTC = 0
   Debug "Fonction non trouvée dans la DLL ..."
   End
 EndIf
Else
  Debug "DLL non trouvée..."
  End
EndIf 


Debug Calcul_TTC(ht,tx)
bourdon
Messages : 5
Inscription : mer. 24/juin/2009 13:45

Génial !

Message par bourdon »

Impeccable ! ca fonctionne. je viens de comprendre mon erreur.
car ton script ainsi que celui de l bator fonctionnent parfaitement.
Grace à tes controle j'ai pu constater que mon programme ne trouvait finalement pas la dll.
c'était pourtant bete !

merci encore
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Un truc que je pige pas, GNOZAL OU CPL
On est obligé de passer par les PROTOTYPES ???
Anonyme

Message par Anonyme »

non, mais c'est plus propre que des callfunctions()
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Kwai chang caine a écrit :Un truc que je pige pas, GNOZAL OU CPL
On est obligé de passer par les PROTOTYPES ???
... çà dépend ...!

En général, non, mais c'est plus joli et plus puissant.

Des fois, oui, depuis PB 4.40 pour passer des flottants en argument à une fonction définie par un pointeur, car CallFunctionFast() ne supporte plus les flottants, uniquement les entiers.
Historique PB4.40 beta a écrit :- Changed: Call(C)Function(Fast) parameters have been changed from 'Any' to 'Integer'.
Un exemple :
Avant :

Code : Tout sélectionner

Global PureCAB_CompressionCallback
...
CallFunctionFast(PureCAB_CompressionCallback, Filename.s, PerCent.f)
Après :

Code : Tout sélectionner

Prototype.l Proto_PureCAB_UserCompressionCallback(Filename.s, PerCent.f)
Global PureCAB_UserCompressionCallback.Proto_PureCAB_UserCompressionCallback
...
PureCAB_UserCompressionCallback(Filename.s, PerCent.f)
Dernière modification par gnozal le mer. 26/août/2009 15:14, modifié 1 fois.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci à vous deux pour la reponse 8)
non, mais c'est plus propre que des callfunctions()
J'suis dégouté, j'ai tout fait mes "merdegrammes" avec callfunction :cry:
Oui, depuis PB 4.40 pour passer des flottants en argument à une fonction via un pointeur, car CallFunctionFast() ne supporte plus les flottants, uniquement les entiers.
Et ben ça va encore faciliter la tache a KCC :?
Ce qui est rigolo, c'est que j'ai essayé de faire marcher le code de BOURDON sans les prototypes, avec la V4.30 et j'suis pas non plus arrivé a remonter le resultat :?
Répondre