Import lib ou OpenLibrary

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Import lib ou OpenLibrary

Message par Kwai chang caine »

Bonjour à tous

Je voulais savoir qu'est ce qui est le mieux entre importer une lib statique ou bien ouvrir la meme lib mais en dynamique (DLL) ??

Car j'ai une grosse DLL, et je voulais savoir si quand on fait import, on charge en mémoire toutes les fonctions de la lib, ou bien seulement celles qui sont déclarées ??

Merci et bonne journée
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Import lib ou OpenLibrary

Message par Backup »

perso , j'ai deja fait des Dll (Nono en a fait partie)

j'ai jamais utilisé "import²" !! 8O

je crois que c'est réservé lorsque tu utilise des Dll faites avec un autre langage non ?

voila jutilise ceci rien d'autre :
PureBasic permet de créer des librairies dynamiques liées au standard Microsoft Windows (DLL : Dynamic Linked Library). Le code d'une DLL est de même nature que le code PureBasic excepté qu'aucun code ne peut exister en dehors d'une procédure. Lors de l'écriture d'une DLL, tout le code est intégré dans des procédures. Lorsqu'une procédure doit être publique (accessible par un programme tiers qui doit accéder à la DLL), le mot clef ProcedureDLL est utilisé au lieu de Procedure. C'est la seule différence pour écrire un programme.

Lorsque le codage est ainsi fait, il suffit de sélectionner 'Shared DLL' comme format de sortie (fenêtre 'Compiler Option' dans l'éditeur PureBasic ou commutateur /DLL dans la ligne de commande) et de créer un exécutable.
Exemple:

ProcedureDLL MaFonction()
MessageRequester("Bonjour", "Voici une DLL PureBasic !", 0)
EndProcedure

; Voici le programme client qui utilise la DLL
;
If OpenLibrary(0, "PureBasic.dll")
CallFunction(0, "MaFonction")
CloseLibrary(0)
EndIf


tu parle toujours 'd'import' avec les DLL alors que ça ne concerne pas les DLL
Pour les programmeurs chevronnés. Import : EndImport permet de déclarer facilement des fonctions et des variables externes à partir d'un fichier bibliothèque (.lib) ou objet (.obj).
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Bah justement quand tu compile ta DLL, t'as un fichier DLL evidemment :mrgreen:
Mais aussi un fichier LIB qui est créé en meme temps

Ce fichier LIB, tu peux l'utiliser comme la DLL, mais il faut l'importer dans ton programme a l'aide de import/endimport.
Et entre le import/endimport tu declare toutes tes fonctions...
En fin de compte comme avec VB et ses declares ....

Ma question etait, le fait de les declarer les fait charger en memoire ??? ou bien comme avec VB, elles ne sont chargées que lorsque on les utilise ??
Et lorsque l'on en declare pas...elle sont chargées ou bien non ????
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Re: Import lib ou OpenLibrary

Message par cha0s »

quand on compile sous visual studio ou gcc ou encore mingw en shared on a un gros fichier .dll/.so et un petit fichier .lib/.a. On peut faire un import sur le .lib/.a qui permet une utilisation plus simple, pas besoin de passer par openlibmachin avec des prototype pour avoir un truc correct.

Pour réponde a kwai chen.. heuu chun .. enfin bref, compiler avec un .lib/.a en static alourdie ton exe puisque il copie les fonctions dedans au lieu de devoir se les trimballer avec une .dll/.so.

concrètement si tu veut pas te balader avec une dll que personne ne possède, le static est pour toi, sa évite aussi au gens de faire des bêtises avec ta dlls si tu n'est pas préteur ou encore réduit le nombre de fichier a balader avec ton exe. Ceci est totalement idiot pour les libs standards.

Edit : un avantage aussi c'est que les fonctions ne sont pas copié si elle ne sont pas utilisé :p.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Chaos a écrit :Pour réponde a kwai chen.. heuu chun ..
:lol:
Chaos a écrit :Edit : un avantage aussi c'est que les fonctions ne sont pas copié si elle ne sont pas utilisé :p.
Merci de ta reponse CHAOS 8)
Alors que l'on se comprenne bien, le fait de les declarer, ne les charge pas....comme dans VB6
Elle sont juste declarée, pour que le programme la connaise si on l'appelle :D

Donc au niveau chargement en memoire, la statique est comme la dynamique, si on n'appelle pas une fonction ...elle n'est jamais chargée, meme si elle est déclarée

Dans la statique il faut la declarer, une fois pour toute avec import/endimport
Alors que la dynamique faut se taper a chaque fois les calllibrary

Hors mis les avantages que tu m'as donné au dessus, juste en parlant memoire c'est juste ça la difference, :roll:
Dernière modification par Kwai chang caine le lun. 02/nov./2009 19:27, modifié 1 fois.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Import lib ou OpenLibrary

Message par Anonyme2 »

Un petit problème avec les import qui fait que je n'y suis plus très favorable bien que cela soit super simple d'emploi.

Si tu utilises les import, ton exe va chercher la dll avant même d'exécuter ton code, si la dll n'est pas trouvée, tu as un message d'erreur en anglais "bla bla bla". Je l'ai eu ce message, alors j'ai ajouté un test avec openlibrary mais là encore, le message d'erreur en anglais d'abord, d'où le fait que les import testent la présence de la dll au tout démarrage.

Aujourd'hui, j'utilise l'openlibrary, c'est un peu plus long, je l'avais fait avec GDI+ (plus de 600 fonctions) pour m'amuser mais je n'ai pas codé toutes les fonctions de GDI+.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Bonjour DENIS :D
Mon bon DENIS a écrit :Si tu utilises les import, ton exe va chercher la dll avant même d'exécuter ton code,
Oulala...un doute me penetre...hum..hum....enfin je veux dire m'envahi, en te lisant :mrgreen:

Tu parle bien du fichier LIB...pas de la DLL ??? 8O
Car on ne peut pas importer la DLL ????
Je me "trompe-je" pas ???? :roll:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Import lib ou OpenLibrary

Message par Anonyme2 »

Les import nécessitent le fichier .lib.

Lorsque tu executes ton code, il n'y a plus que ton exe et la dll, si elle n'est pas trouvée à l'execution, tu as le message d'erreur, je l'ai testé sur Win200 qui n'avais pas GDI+ et j'avais fait l'exe sur XP qui lui possède GDI+, d'où l'erreur d'execution , c'est clair :D

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

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

Oui oui mon bon denis, c'est clair, ce que je n'avais pas compris, c'est que je croyais que tu avais dit que l'on pouvait faire

Code : Tout sélectionner

Import "MaDll.dll"
Et non pas

Code : Tout sélectionner

Import "MaDll.lib"
Donc en fin de compte, si on prend bien garde de laisser le fichier LIB avec l'executable, EndiIport ou OpenLibrary c'est du kifkif au meme :roll:
Aucun des deux ne charge quoi que ce soit, si on appelle pas les fonctions, j'ai bien compris la ??? :roll:

Et le fichier EXP y sert a rien ???
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Import lib ou OpenLibrary

Message par Anonyme2 »

Bon, je ne sais pas si j'ai tout compris à ton charabia, c'est de moins en moins clair plus tu expliques :D

Dans mon esprit le import est une aide à l'écriture, je ne sais pas si ça importe réellement les fonctions de la dll mais dans mon cas non, j'ai toujours utilisé les import depuis un lib comme par exemple
Import "gdiplus.lib"
le lib ne sert pas lors de l'execution, enfin c'est ce que je crois.

Pour le import "fichier.dll", je ne sais pas si ça fonctionne et si oui ce que ça fait, on ne peut pas être plus clair :D

S'il y a des gourous des imports, merci de nous éclairer, je comprend vite mais faut expliquer longtemps ...
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

J'ai compris "çaqu'tu veut dire" :D
En fait le LIB ne serais qu'une sorte "d'interface" permettant a PB de pouvoir importer la DLL plutot que de l'ouvrir :D

Bon reste plus qu'a faire "3615 GOUROU" pour avoir confirmation :D
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Re: Import lib ou OpenLibrary

Message par cha0s »

EXP c'est juste pour visual studio.

Un .lib en static c'est une librairies complète compilé, en shared c'est une sorte de header, a confirmer.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

cha0s a écrit :EXP c'est juste pour visual studio.
JE supose que tu parle de visual studio DOT NET, pas de VS6 ??? :roll:
cha0s a écrit :Un .lib en static c'est une librairies complète compilé.
Donc c'est la DLL complete, pas une "Interface" pour adapter la DLL au import/endimport
Je vais faire un essai pour etre sur de bien comprendre
cha0s a écrit :en shared c'est une sorte de header, a confirmer.
Le "shared" 8O
Je sais que c'est le partage des variables ou des sources.....comme les restos du coeur
Mais en DLL, je sais pas "çaquoissest" ??? :oops:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: Import lib ou OpenLibrary

Message par Kwai chang caine »

J'ai encore une question :oops:

Si on veut rappatrier une string d'une DLL avec import y'a pas plus simple que ça ??? :(

Code : Tout sélectionner

Import "Dll.lib"
 MaFonctionDansLaDll(a.s)
EndImport

Procedure.s MaFonctionDansExe(Phrase.s)
 ProcedureReturn PeekS(MaFonctionDansLaDll(Phrase))
EndProcedure

Debug MaFonctionDansExe("Bonjour Kcc")
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
cha0s
Messages : 681
Inscription : sam. 05/mars/2005 16:09

Re: Import lib ou OpenLibrary

Message par cha0s »

shared = partagé (en l'occurrence ici, bibliothèque partagé -> .dll :p).

sinon je parlait du visual studio pour le C/C++.

Pour les strings aucune idée
Répondre