Page 1 sur 2
Import
Publié : jeu. 07/sept./2017 18:30
par Zorro
les ennuis commencent
depuis tout a l'heure je genere une DLL "operations_x86.dll" ainsi que le fichier "operations_x86.lib" qui va avec
voici le code de ma DLL
Code : Tout sélectionner
; ; ;
; ; Code "operations.dll " a compiler en DLL
ProcedureDLL.i AttachProcess(Instance)
EndProcedure
; Called when the program release (free) the DLL ;
ProcedureDLL.i DetachProcess(Instance)
EndProcedure
; Both are called when a thread in a program call or release (free) the DLL ;
ProcedureDLL.i AttachThread(Instance)
EndProcedure
ProcedureDLL.i DetachThread(Instance)
EndProcedure
; ********************************************
ProcedureDLL.i A(a,b)
ret=a+b
ProcedureReturn ret
EndProcedure
ProcedureDLL.i s(a,b)
Ret= a-b
ProcedureReturn Ret
EndProcedure
ProcedureDLL.i d(a,b)
Ret=a/b
ProcedureReturn Ret
EndProcedure
ProcedureDLL.i M(a,b)
Ret=a*b
ProcedureReturn
EndProcedure
les 4 operations de base en procedures , rien de bien compliqué !
ensuite je teste avec ce code :
Code : Tout sélectionner
;
;
Import "operations_x86.lib"
a(a,b)
s(a,b)
d(a,b)
M(a,b)
EndImport
; Utilisation
debug a(5,8)
debug S(8,2)
debug d(10,8)
debug M(5,8)
ça ne marche pas ! (PLUS!! ) Quelqu'un a une idée ??
car normalement ça doit marcher !!
l'import du fichier Lib a coté de sa DLL , doit fonctionner , hors, ça ne fonctionne pas ...
contrairement a ce qu'indique la Doc ....
Blasé , je suis ....
y a t'il une ecriture speciale a respecter ??
Re: Import
Publié : jeu. 07/sept./2017 18:43
par GallyHC
Bonjour,
Je penses que c'est juste parce qu'il n'accepte pas ta procedureDLL avec "a(a,b)", remplace avec "test(a,b)" et cela doit fonctionner maintenant.
GallyHC
Re: Import
Publié : jeu. 07/sept./2017 18:55
par kernadec
Bonsoir
Pour la commande "import" voir l utilisation de la commande "prototypes"
Pour passer des parametres et récupérer les resultats dans les *.dll et *.lib
Il y a des exemples d utilisation des prototypes sur les forums
C est pas le meilleurs exemple Mais sa donne une idee de la marche a suivre
Je n ai pas approfondi le cote " public prototypes"
http://www.purebasic.fr/french/viewtopic.php?f=3&t=8459
Cordialement
Re: Import
Publié : jeu. 07/sept./2017 19:08
par Zorro
le probleme c'est que les prototypes demandent l'utilisation
de "OpenLibrary"
alors que les imports non !
et moi c'est ça que je veux
en principe les imports permettent de se passer de tout autre chose pour échanger avec la Procedure importée
parametres ou pas , ... ou alors la doc est mal ecrite
changer le nom de la procedure ne change rien , j'avais deja essayé

Re: Import
Publié : jeu. 07/sept./2017 19:14
par kernadec
Openlibrary pour une dll
Mais pas pour import regarde mon poste du calendrier astronomiques
Lien dans post precedent
Re: Import
Publié : jeu. 07/sept./2017 19:27
par Zorro
ok
ça marche (avec import )
c'est Case Sensitif (on m'a aidé sur le forum anglais )
et en plus je me trompais de compilo (je jongle avec 2 compilo (la 5.42 et la 5.60 )
donc le code qui marche c'est celui-ci :
pour la DLL "operation.Dll" (et generation du Lib qui va avec "operation.lib" )
Code : Tout sélectionner
; Code "operations.dll " a compiler en DLL
ProcedureDLL.i AttachProcess(Instance)
EndProcedure
; Called when the program release (free) the DLL ;
ProcedureDLL.i DetachProcess(Instance)
EndProcedure
; Both are called when a thread in a program call or release (free) the DLL ;
ProcedureDLL.i AttachThread(Instance)
EndProcedure
ProcedureDLL.i DetachThread(Instance)
EndProcedure
; ********************************************
ProcedureDLL.i a(a,b)
ret=a+b
ProcedureReturn ret
EndProcedure
ProcedureDLL.i s(a,b)
ret= a-b
ProcedureReturn ret
EndProcedure
ProcedureDLL.i d(a,b)
ret=a/b
ProcedureReturn ret
EndProcedure
ProcedureDLL.i m(a,b)
ret=a*b
ProcedureReturn ret
EndProcedure
utilisation ensuite comme ça :
Code : Tout sélectionner
Import "operation.lib"
a(a,b)
s(a,b)
d(a,b)
m(a,b)
EndImport
; Utilisation
debug a(5,8)
debug s(8,2)
debug d(10,8)
debug m(5,8)
Merci a tous

Re: Import
Publié : jeu. 07/sept./2017 19:41
par kernadec
Merci zorro
si je comprend bien dans ce cas proceduredll
Et reciproque à l'utilisation de la commande prototypes
Cordialement
Re: Import
Publié : jeu. 07/sept./2017 22:30
par Zorro
Non , ce serai plutôt la commande 'import'
Comme je l'ai indiqué,
Tu fais une DLL , et ça génère aussi le fichier lib
Ensuite avec import tu importes les fonctions direct dans ton code
Sans avoir à charger la DLL
Les procédures DLL sont directement disponibles !
Un peut comme tailbite ..
Sauf que là il faut quand même importer les fonctions qui se trouvent dans la DLL .
Et je suis en train de trouver une solution pour ne pas avoir à les importer
Mais qu'elles s'importent toutes seules ..
Cependant avec EPB je suis confronté à un problème !
Les DLL que EPB génère fonctionnent ,mais pas les lib ....
Je pense encore à un problème lié à l'Unicode /ASCII
Ceux qui trouvent qu'il n'y a pas débat n'ont semble t'il jamais été confronté
À des problèmes de compatibilité
Pour ma part ça concerne quasi un code sur deux !!
C'est loin d'être anodin ..
En fait, dès que je code avec du texte !
Franchement je vois pas le progrès !
l'Unicode çà ne sert qu'au chinois , car l'ASCII étendu de 0 à 255 suffit à coder les langues europeenes
J'aurai préféré que l'ASCII fut la base ,et l'Unicode une extension possible
Que l'inverse !.... Mais bon j'ai qu'à rester en 5.42.…
Re: Import
Publié : ven. 08/sept./2017 5:46
par kernadec
Bjr Zorro
Merci pour ta reponse
Ensuite avec import tu importes les fonctions direct dans ton codeSans avoir à charger la DLLLes procédures DLL sont directement disponibles !Un peut comme tailbite ..
Mais il me semble que tu decris dans ce passage un processus d'utilisation des prototypes
Mon exemple fonctionne comme ça dans le lien plus haut, d ailleurs j ai écris
les deux modes dans le code mais la partie appel dll a été mise en commentaires
Pour n'utiliser que le mode *.lib
Avec passage de parametres et récupération des calculs tableaux avec pointeurs etc...
Ps: Pour l unicode je partage ton point de vue
Cordialement
Re: Import
Publié : ven. 08/sept./2017 6:39
par Zorro
Bonjour,
oui, peut etre
en fait il doit bien y avoir une différence entre Prototype et import !...??

Re: Import
Publié : ven. 08/sept./2017 6:52
par Micoute
Bonjour Zorro, ton erreur n'est pas due à l'Unicode, mais au fait que tu as nommé ton fichier "operations.lib" et que tu appelles "operation.lib", ça fait forcément une erreur de fichier non trouvé.
Re: Import
Publié : ven. 08/sept./2017 8:13
par kernadec
Je pense que l ecritures des fonctions de la librairie à partir
De la syntaxe proceduredll pour activer chacune d elles..
se trouve en analogie de la mise en place avec prototype d une liste de de fonctions contenue dans la librairie
Pour ensuite de la meme maniere à partir d' import avoir toutes ses commandes
disponibles par appel de leurs noms et parametres
Maintenant il me semble que Proceduredll et prototypes ont un usage similaire
J ai d 'ailleurs du mal à voir des différences entre elles
Cordialement
Re: Import
Publié : ven. 08/sept./2017 8:42
par Zorro
Micoute a écrit :Bonjour Zorro, ton erreur n'est pas due à l'Unicode, mais au fait que tu as nommé ton fichier "operations.lib" et que tu appelles "operation.lib", ça fait forcément une erreur de fichier non trouvé.
non ne te fie pas a mes commentaires ....
il y a bien un probleme pour moi avec EPB (que je viens officiellement d'arreter ! )
ça a toujours deconné , des l'apparition du Unicode Only de Purebasic
EPB etait sensé pouvoir charger des versions anciennes de Purebasic en utilisant les anciens compilo (non unicode Only )
mais avec des fichiers *.pb ecrits en AScii
puis maintenant, il me faut tenir compte des nouveau fichiers *.pb , unicode only ...
bref, ça deviens ingérable pour moi , j'ai plus le temps a perdre a ces âneries ....
j'ai fait de mon mieux, pour essayer de faire que ça roule
et jusqu'a cette histoire de DLL/Lib et d'import , je n'avais pas trop de soucis ...
mais il semble que EPB n'arrive pas a pondre un Lib compatible .... je ne comprends pas pourquoi , car j'utilise le Flag de compilation des /Dll comme il faut
lorsque j'appelle la DLL , ça marche .....
mais lorsque j'utilise le Lib correspondant, ça plante !!
alors que si je genere ce lib avec l'editeur officiel , la ça marche ....
je ne vois donc que cette histoire de Utf8/Ascii , alors, je laisse tomber ...

ça me saoul .. je ne creer pas, je passe mon temps a me battre contre le langage ...
Re: Import
Publié : ven. 08/sept./2017 9:16
par Zorro
je viens d'effectuer des testes en rapport avec le format des fichiers
si je sauve avec EPB mes *.pb au format #PB_UTF8 ou au format #PB_Unicode
dans les deux cas, si je recharge le fichier avec l'editeur Officiel, il n'ecrit pas les accents mais des signes bizarre
ça ne marche que si avec EPB je sauve mes fichier *.pb au format ASCII
là et seulement là, l'editeur officiel recharge avec les accents ....
a ce demander si l'editeur Officiel ne fonctionne pas en Ascii en réalité ! ???
si je force l'editeur officiel a sauver en UTF8 (par le menu encoding UTF8) , EPB peut lui recharger le fichier avec les accents ...
bref ... le cirque !
Re: Import
Publié : ven. 08/sept./2017 9:41
par Zorro
vous connaissez un moyen pour editer un lib ??
je voudrai comparer la difference entre les lib generé par EPB et ceux generé par l'editeur Officiel ..