Import

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Import

Message par Zorro »

les ennuis commencent :roll:

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 !! 8O

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 ??
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: Import

Message 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
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Import

Message 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
Dernière modification par kernadec le jeu. 07/sept./2017 19:10, modifié 2 fois.
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Import

Message 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 :mrgreen:

changer le nom de la procedure ne change rien , j'avais deja essayé :)
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Import

Message par kernadec »

Openlibrary pour une dll
Mais pas pour import regarde mon poste du calendrier astronomiques
Lien dans post precedent
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Import

Message 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 :)
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Import

Message par kernadec »

Merci zorro
si je comprend bien dans ce cas proceduredll
Et reciproque à l'utilisation de la commande prototypes
Cordialement
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Import

Message 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.…
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Import

Message 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 :mrgreen:


Cordialement
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Import

Message par Zorro »

Bonjour,
oui, peut etre

en fait il doit bien y avoir une différence entre Prototype et import !...?? :)
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Import

Message 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é.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
kernadec
Messages : 1606
Inscription : ven. 25/avr./2008 11:14

Re: Import

Message 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
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Import

Message 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 ...
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Import

Message 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 !
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: Import

Message 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 ..
Répondre