Page 1 sur 2
Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 17:58
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
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 18:46
par Backup
perso , j'ai deja fait des Dll (Nono en a fait partie)
j'ai jamais utilisé "
import²" !!
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).
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 18:58
par Kwai chang caine
Bah justement quand tu compile ta DLL, t'as un fichier DLL evidemment
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 ????
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 19:06
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.
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 19:25
par Kwai chang caine
Chaos a écrit :Pour réponde a kwai chen.. heuu chun ..
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
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
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,

Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 19:26
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+.
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 19:32
par Kwai chang caine
Bonjour DENIS
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
Tu parle bien du fichier LIB...pas de la DLL ???
Car on ne peut pas importer la DLL ????
Je me "trompe-je" pas ????

Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 20:30
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
A+
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 20:40
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
Et non pas
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

Aucun des deux ne charge quoi que ce soit, si on appelle pas les fonctions, j'ai bien compris la ???
Et le fichier EXP y sert a rien ???
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 22:19
par Anonyme2
Bon, je ne sais pas si j'ai tout compris à ton charabia, c'est de moins en moins clair plus tu expliques
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
S'il y a des gourous des imports, merci de nous éclairer, je comprend vite mais faut expliquer longtemps ...
Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 22:35
par Kwai chang caine
J'ai compris "çaqu'tu veut dire"

En fait le LIB ne serais qu'une sorte "d'interface" permettant a PB de pouvoir importer la DLL plutot que de l'ouvrir
Bon reste plus qu'a faire "3615 GOUROU" pour avoir confirmation

Re: Import lib ou OpenLibrary
Publié : lun. 02/nov./2009 22:39
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.
Re: Import lib ou OpenLibrary
Publié : mar. 03/nov./2009 8:47
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 ???
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"

Je sais que c'est le partage des variables ou des sources.....comme les restos du coeur
Mais en DLL, je sais pas "çaquoissest" ???

Re: Import lib ou OpenLibrary
Publié : mar. 03/nov./2009 12:50
par Kwai chang caine
J'ai encore une question
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")
Re: Import lib ou OpenLibrary
Publié : mar. 03/nov./2009 13:44
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