|
Dernière réponse | |
---|---|
Sujet : C++ aidez-moi avec ces s******* de dll !!!!! -> new pb, new indice | |
Moustaaki | (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] |
Aperçu |
---|
Vue Rapide de la discussion |
---|
Moustaaki | (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] |
seblamb | 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. |
haahhahahaha | sa a l'air de la merde Borland apres tout ce ke je vois
vive Visual C++ |
petoulachi | 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. |
Moustaaki | 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 ? |
El_gringo | :pt1cable: moi ça marche, moi ça marche ! :pt1cable: |
seblamb | 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 .... |
Moustaaki | je n'ai pas inclut la dll !!
j'ai inclu la lib, justement ! #include truc.LIB ou pas ?? |
seblamb | Faut pas inclure la dll mais le .lib |
Moustaaki | 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] |
Moustaaki | 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] |
seblamb | 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 | 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. |
El_gringo | gérer les dll, y a pas à dire, c vraiement casse couille... |
petoulachi | ==> passe au JAVA :D |
Moustaaki | 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 |
Moustaaki |
|
noregret | // 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... |
Moustaaki | 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] |
noregret | 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 |
HelloWorld | 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() ... |
Moustaaki | 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] |
HelloWorld | 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 ... |
BENB | Pardon z51, j'ai ete un peu plus lente que toi ! |
BENB |
|
z51 | Un LoadLibrary, et après choper tes fonctions avec des GetProcAddress. |
Moustaaki | 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] |