Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1999 connectés 

  FORUM HardWare.fr
  Programmation

  C++ aidez-moi avec ces s******* de dll !!!!! -> new pb, new indice

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

C++ aidez-moi avec ces s******* de dll !!!!! -> new pb, new indice

n°31551
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 14-05-2001 à 17:09:37  profilanswer
 

Donc, maintenant, pas de problem, ça compile ....
 
j'ai maintenant des problem à l'execution, du style opération non conforme et tout qui plante ...
 
j'ai ouvert le dll avec depends.exe livré avec visual C++.
'y me dit que c'est un DLL win32 console ...
Est-ce que le fait que ce soit un win32 console et pas un win32 GUI peut etre à l'origine de ce pb ?

 

[edit]--Message édité par Moustaaki--[/edit]

mood
Publicité
Posté le 14-05-2001 à 17:09:37  profilanswer
 

n°31553
z51
Posté le 14-05-2001 à 17:11:06  profilanswer
 

Un LoadLibrary, et après choper tes fonctions avec des GetProcAddress.

n°31555
BENB
100% Lux.
Posté le 14-05-2001 à 17:13:06  profilanswer
 

Moustaaki a écrit a écrit :

je ne suis toujours pas parvenu à utiliser correctement mes dlls .
J'obtient en général l'erreur suivante lorsque j'essaye d'utiliser la fonction :
Error:  Error: Unresolved external 'NiffToPlay(char*,char*) __stdcall' referenced from module transcripteur.cpp
 
 
dans l'entête du fichier source, mêt la ligne suivante (que j'ai sagement recopié dans un programme qui utilise cette même fonction) :
extern int _import pascal NiffToPlay(char *pFilePlay, char *pFileNiff);
 
sachant que je programme avec Borland C++, il -y-a t-il autre chose à faire (style un include, un import, ...) ?
Je dois inclure le dll dans mon projet, n'est-ce pas ?
J'ai essayé d'inclure les librairies mais Borland n'arrive pas à les lire...  
Lorsque j'essaye d'ouvrir une des DLL, c'est tout vide...
 
Qu'est ce que je dois faire ?  
 
merci d'avance !   :jap:




 
Pour fair ca il te faut le .lib qui va avec la dll (il a ete genere en meme temps)
utilise le couple LoadLibrary / GetProcAdress() et un pointeur sur la fonction...

n°31556
BENB
100% Lux.
Posté le 14-05-2001 à 17:13:49  profilanswer
 

Pardon z51, j'ai ete un peu plus lente que toi !

n°31558
HelloWorld
Salut tout le monde!
Posté le 14-05-2001 à 17:17:57  profilanswer
 

lis donc le topic " [C++] Utilisation d'une fonction d'une DLL ???" pas tres loin du tiens
y'a un truc sur BC et les .lib ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°31564
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 14-05-2001 à 17:21:18  profilanswer
 

Oui mais c'est quoi ce LoadLibrairi ? c'est le premier prog que je fais pour windows et ça ne me dis rien tout ça ....
 
et dans le dit topic, ya rien qui m'aide vraiment
 
Je viens de trouver ce LoadLibrary ...
LoadLibrary("leCheminDeLaLib" ); // c'est bein ça ?
 
 
 
 
(C'est pas un truc du genre Dynamic Loaded Library plutôt ? en réponse au topic plus bas...)

 

[edit]--Message édité par Moustaaki--[/edit]

n°31569
HelloWorld
Salut tout le monde!
Posté le 14-05-2001 à 17:24:57  profilanswer
 

seblamb : "On peut se passer de loadlibrairy sous tous les produits C++ Builder ou Borland C++.
Il suffit de convertir le .lib avec "coff2omf.exe" qui se trouve dans le reprtoire de "bcb.exe""
 
c de ca que je parlais
 
sinon, d'apres ce que je pense avoir compris, à part kernel32.dll, toutes les autres dll ne sont pas forcement chargees en memoire (c le but : si on en a pas besoin on les charge pas)
alors, avant d'utiliser une fonction d'une dll, faut la charger via load library
puis tu la link dynamiquement ("dynamic linked library" ou un truc comme ca) via GetProcAdress() ...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°31575
noregret
Posté le 14-05-2001 à 17:30:18  profilanswer
 

LoadLibrary permet de charger une DLL en mémoire:
HINSTANCE LoadLibrary(nom_fichier_dll);
 
et GetProcAddress récupère le pointeur de la fonction qui se trouve dans la DLL:
FARPROC GetProcAddress(HMODULE hModule, LPCSTR lpProcName);  
hModule : ce qui est retourné par LoadLibrary
lpProcName : nom de la fonction dans une chaine
 
Consulte l'aide


---------------
Configuration
n°31576
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 14-05-2001 à 17:30:23  profilanswer
 

donc je n'ai pas besoin de cette connerie :  
extern int _import pascal NiffToPlay(char *pFilePlay, char *pFileNiff);
 
 
??
 
 
je fais un truc de ce genre dans le main par exemple :
         HINSTANCE truc = LoadLibrary("niffplay.lib" ) ;
         GetProcAddress(truc, "NiffToPlay" ) ;

 

[edit]--Message édité par Moustaaki--[/edit]

n°31580
noregret
Posté le 14-05-2001 à 17:37:51  profilanswer
 

// Déclarer un type de la fonction
typedef void (NIFFTOPLAY)(char *, char *);
 
// Charger la DLL en mémoire
HINSTANCE libInst = LoadLibrary("machin.dll" );
 
// Déclarer la fonction
NIFFTOPLAY *niffToPlay;
 
// Récupérer l'adresse de la fonction
niffToPlay = (NIFFTOPLAY *)GetProcAddress(libInst, "NiffToPLay" );
 
// Appeler la fonction
(*niffToPlay)(parametre_a, parametre_b);
 
Alors, si ca ne marche pas, je veux bien faire moine...


---------------
Configuration
mood
Publicité
Posté le 14-05-2001 à 17:37:51  profilanswer
 

n°31586
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 14-05-2001 à 17:43:16  profilanswer
 

noregret a écrit a écrit :

// Déclarer un type de la fonction
typedef void (NIFFTOPLAY)(char *, char *);
 
// Charger la DLL en mémoire
HINSTANCE libInst = LoadLibrary("machin.dll" );
 
// Déclarer la fonction
NIFFTOPLAY *niffToPlay;
 
// Récupérer l'adresse de la fonction
niffToPlay = (NIFFTOPLAY *)GetProcAddress(libInst, "NiffToPLay" );
 
// Appeler la fonction
(*niffToPlay)(parametre_a, parametre_b);
 
Alors, si ca ne marche pas, je veux bien faire moine...




 
 
 
COOL !!
Merci !!    :hello:  :hap:

n°31769
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 15-05-2001 à 11:47:14  profilanswer
 

Hélas !!!
J'ai un nouveau problem :
Le prog compile niquel mais il "vide" les dll :
ils passent tous à 10Ko alors qu'ils en faisaient à peu près 80...
 
en plus de ça, à l'appel de la fonction, j'obtient l'erreur :
 
Thread 1 stopped
(...)leNomDuProg.exe
fault :access violation at Ox1:  read of adress truc
 
et ya tout qui plante

n°31782
petoulachi
A fortiori, brigadier chef
Posté le 15-05-2001 à 12:07:49  profilanswer
 

==> passe au JAVA :D

n°31793
El_gringo
Posté le 15-05-2001 à 12:16:02  profilanswer
 

gérer les dll, y a pas à dire, c vraiement casse couille...

n°31813
seblamb
Posté le 15-05-2001 à 12:56:37  profilanswer
 

Utiliser une dll c'est très simple : il suffit de lire les documentation.
Déja j'ai jamis vu une dll se vider en compilant un programme qui l'utilise.  :pt1cable:  
 
Sinon
 LoadLibrary
 GetProcAddress
c'est très souple d'utlisation mais il faut regarder les erreurs qu'elle revoient ( voir documentation)
 
Sinon le plus simple c'est d'utiliser un .lib
Si ta dll et ton programme on été créé avec Borland :
  IMPLIB toto.lib toto.dll  
ça crée un  toto.lib que tu inclus dans le projet de ton programme qui utilise la dll.
Et là tu reprend les programme comme il était au début ( sans LoadLibrairy..).  
Si tu as encore le message "Unresolved external 'NiffToPlay..." c'est que ta dll n'est pas bonne.


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
n°31814
seblamb
Posté le 15-05-2001 à 12:56:42  profilanswer
 

Utiliser une dll c'est très simple : il suffit de lire les documentation.
Déja j'ai jamis vu une dll se vider en compilant un programme qui l'utilise.  :pt1cable:  
 
Sinon
 LoadLibrary
 GetProcAddress
c'est très souple d'utlisation mais il faut regarder les erreurs qu'elle revoient ( voir documentation)
 
Sinon le plus simple c'est d'utiliser un .lib
Si ta dll et ton programme on été créé avec Borland :
  IMPLIB toto.lib toto.dll  
ça crée un  toto.lib que tu inclus dans le projet de ton programme qui utilise la dll.
Et là tu reprend les programme comme il était au début ( sans LoadLibrairy..).  
Si tu as encore le message "Unresolved external 'NiffToPlay..." c'est que ta dll n'est pas bonne.


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
n°31843
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 15-05-2001 à 14:23:32  profilanswer
 

En fait la dll se vide lorsque je l'inclu dans le projet...
Alors, j'ai essayé sans et la apparement, ça ne le fait plus ...
 
je n'ai plus le message "Unresolved external 'NiffToPlay..."
Mais j'ai toujours l'erreur operation non conforme lorsque je lance mon programme.
 
 :gun:  :gun:  
ça métonnerai que ça vienne des dll parcequ'elles sont censées fonctionner puisqu'un programme de test (livré avec)qui utilise les même fonctions fonctionne parfaitement. Cependant dans leur programme, ils ne font pas du tout  ce que tu m'as dit de faire, enfait ils mettent juste ça :
 
 
extern int _import pascal PlayToNiff(char *pFileNiff, char *pFilePlay);
extern int _import pascal NiffToPlay(char *pFilePlay, char *pFileNiff);
extern int _import pascal ScorToPlay(char *pFilePlay, char *pFileScor);
extern int _import pascal PlayToScor(char *pFileScor, char *pFilePlay);
 
/////////
/// Es-ce que le mot clé pascal veut dire que la dll a été faite en pascal ???????? Si oui, est-ce que ça peut être la source de mes prôblèmes ?
 
int
main()
{
printf( "Je suis dans Testdll.exe.\n" );
 
ScorToPlay("Kalog0.pla", "Kalog0.pmx" );
PlayToScor("Kalog0p.pmx", "Kalog0.pla" );
 
printf( "Je suis a la fin de Testdll.exe.\n" );
 
return 1;
}
 
 
c'est tout !!
et ça marche !!!
si je fais la même chose dans mon programme, he béh, ça marche po !!
c'est tout de même lourd !
 
 
De plus, je n'ai aucune documentation sur ces dll ! ce sont des dll fabriqué par une équipe de recherche

 

[edit]--Message édité par Moustaaki--[/edit]

n°31856
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 15-05-2001 à 14:45:21  profilanswer
 

SNIFF !!!
ça marche po !!!
 
ça pourrait m'arranger de générer des .def ?
 
j'ai pas besoin de faire #include truc.lib ???
parceque si je le fais, il me dit qu'il ya des caractéres illegaux dedans et si je ne le mét pasn c'est comme si yavait pas les .lib  (et pourtant, je les ai bien mis dans le projet !)
 
 
ça me broute, le c++, putain !!!!
plus d'une semaine que j'y suis dessus, j'ai dejà eu du mal à trouvr commen tfaire un menu et maintenant, ça veut pas marcher et je ne sais pas quoi faire !!!!  (à part me faire moine peut-être)

 

[edit]--Message édité par Moustaaki--[/edit]

n°31858
seblamb
Posté le 15-05-2001 à 14:48:19  profilanswer
 

Faut pas inclure la dll mais le .lib


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
n°31862
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 15-05-2001 à 14:58:52  profilanswer
 

je n'ai pas inclut la dll !!
j'ai inclu la lib, justement !
#include truc.LIB  ou pas ??

n°31881
seblamb
Posté le 15-05-2001 à 15:40:06  profilanswer
 

Non dans le projet pas dans le fichier.
Je sais plus comment on fait sous Borland c++.
Rajoute le .lib dnas la fenetre où il y a les .cpp, .h, .rc ....


---------------
[:seblamb] Moi aussi je veux grater dédé!!!
n°31886
El_gringo
Posté le 15-05-2001 à 15:59:12  profilanswer
 

:pt1cable: moi ça marche, moi ça marche ! :pt1cable:

n°31897
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 15-05-2001 à 16:15:36  profilanswer
 

eh ben tas bien de la chance, el gringo, parceque moi ça marche po ...
oui, je l'ai bien inclut dans le projet (dans la petite fenetre qui liste tous les fichiers du projet).
 
maintenant, j'ai l'erreur suivante :
call to undefined function ScorToPlay(char*, char*)
 
Si ya pas de ligne de code a rajouter ,bin, ça merde total !
 
je vais essayer avec visual C++ que je viens de récupérer ... on vera bien si ça marche mieux ! ya des différences pour importer les dll ou est ce que c'est le même principe ?

n°31910
petoulachi
A fortiori, brigadier chef
Posté le 15-05-2001 à 16:47:36  profilanswer
 

Il y a une autre solution qui s'appelle; se documenter.
c'est super bien (si si je vous jure), ça permet de trouver precisement ce que l'on veut.
Et pour ça, t'as aussi bien internet que, allez disons la BU, les magasines voir meme ma grand mere.

n°31941
haahhahaha​ha
Posté le 15-05-2001 à 17:46:21  profilanswer
 

sa a l'air de la merde Borland apres tout ce ke je vois
vive Visual C++


---------------
haahhahahaha == TheJackal
n°31954
seblamb
Posté le 15-05-2001 à 18:19:57  profilanswer
 

Sous visual ou borland c'est exactement la même chose.
La seule différences c'est que les formats de .lib ne sont pas compatibles.

n°32100
Moustaaki
.: ILITCH :. ésprit sibérie
Posté le 16-05-2001 à 10:44:13  profilanswer
 

(j'ai trouvé qu'un pauv' bouquin de prog windows à la BU' :  
Programmer Windows avec Borland C++ 4.5  
il est bien pour apprendre à faire une interface mais après pour les dll, ils disent queud (ou alors, c'est que je ne sais pas lire)
 
sinon les autres bouquins, c'est de la prog sous linux ...
apparement, ya pas bp de gars qui apprennent la prog windows
 
 
Mon dll est un win32 console, ça peut poser prôblem ?

 

[edit]--Message édité par Moustaaki--[/edit]

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  C++ aidez-moi avec ces s******* de dll !!!!! -> new pb, new indice

 

Sujets relatifs
[Apache Linux + CGI] Aidez moi svp !!PASCAL: Je vous en supplie, aidez moi, ou lisez au moins!!
A l'aide aidez moi ---> prog Win32aidez moi
flash 5.0 AIDEZ MOI SVP[HTML] Question simple .. Aidez moi svp :-)
aidez moi si je ne trouve pas je suis mortAidez moi SVP!!
aidez moi je suis victime de nukers !!!!!!!!!!!urgent sur fenetre pop up j ai essayé ça marche pas aidez moi!!!!!!
Plus de sujets relatifs à : C++ aidez-moi avec ces s******* de dll !!!!! -> new pb, new indice


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR