DLL Probleme pour utiliser vorbisfile.dll (fichier introuvable)

cs_Marcial Messages postés 57 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 31 juillet 2008 - 24 juin 2007 à 12:51
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 - 24 juin 2007 à 18:07
Bonjour a tous...
J'ai comme qui dirait un problème...
J'essaye depuis un bon petit moment maintenant, d'utiliser la DLL vorbisfile.dll
pour récuperer les propriétés des fichiers OGM mais rien n'y fait...

Quoi que je fasse et quelque soit la façon dont j'essaye de déclarer la DLL
Vb me dit: "Erreur d'execution '53'....Fichier introuvable: vorbisfile.dll"
J'ai essayer tout les chemins possibles et imaginables sans succes...
De faire une déclaration de type Function et de type Sub...
J'ai également essayer de mettre la dll dans différents répertoires...
J'ai même essayer (en désespoire de cause et sans aucune conviction)
de l'enregistrée avec REGSVR32.EXE... Bien sur ça n'a pas marché...

Ce que je ne comprend pas c'est que j'ai déjà utilisé des dll dans d'autres
applications et que cela n'a jamais posé de problèmes...

Cette saletée commence a me faire devenir chèvre...

Y'aurais t'il une bonne âme pour me donner la solution.





Merci par avance.

___________________________________________


Le plus grand des défauts de l'homme c'est de toujours
pointer un doigt accusateur... Mais jaimais devant un miroir...
___________________________________________

13 réponses

PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
24 juin 2007 à 13:05
salut,
la dll n'est pas fournie avec un userguid?

elle est faite en C/CPP? Delphi?
si oui, place là simplement dans, le même dossier sur ton vbp et déclare correctement les fonctions comme des APi Win

++
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 juin 2007 à 13:12
Vérifie bien aussi que tu dispose de toutes les dépendances necessaires à cette dll et notamant les codec OGG Vorbis

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0
cs_Marcial Messages postés 57 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 31 juillet 2008
24 juin 2007 à 13:51
Slt,
 en ce qui concerne le Userguid, oui, il y en a un disponible sur le site
de Xiph

www.vorbis.com

, je l'ai longuement parcouru et m'en suit servi
pour ecrire l'appel de la dll.
Je doit avouer que j'ai un peu de mal a retranscrire ce qui y est
expliqué. Tout les exemples sont donnés en C ou C++...
Ce qui prète a penser que la dll est écrite en C ou C++...

Pour ce qui est des dépendances je suis certain qu'il ne me manque rien...
J'ai décompilé la dll avec Windasm...
Pour info, les dépendances sont les suivante:
- ogg.dll
- vorbis.dll
- kernel32.dll
Et le conteneur est installé sur le système, mais je ne pense pas
que cela soit indispansable...

Par contre il n'y apas de fichier *.lib disponible...
Pensez vous que cela pourait venir de là ?
(Je pose la question mais a mon avis la réponce sera non...   )









___________________________________________
Le plus grand des défauts de l'homme c'est de toujours
pointer un doigt accusateur... Mais jaimais devant un miroir...
___________________________________________
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 juin 2007 à 14:38
Le .lib est inutile en VB, par contre pour que ta dll soit utilisable en VB, il faut que la convention d'appel soit stdcall.

C'est à dire que chaque fonction de la dll doit etre exportée avec l'attribut _stdcall. Par défaut en C les fonctions des dll sont exportée avec l'attribut Cdecl. Dans ce cas la dll n'est pas utilisable avec VB

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #    http://aide-office-vba.monforum.com/index.php
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Marcial Messages postés 57 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 31 juillet 2008
24 juin 2007 à 14:47
Comment puis-je savoir si l'attribut est _stdcall ou cdecl ?




___________________________________________
Le plus grand des défauts de l'homme c'est de toujours
pointer un doigt accusateur... Mais jaimais devant un miroir...
___________________________________________
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
24 juin 2007 à 15:00
Regarde ce que tu as désassemblé.
Si fonction finit en "ret 0" alors que les params sont en offset de ESP, c'est cdecl sinon stdcall.

ciao...
BruNews, MVP VC++
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
24 juin 2007 à 15:02
uniquement par le userguid (ou l'auteur directement)
0
PCPT Messages postés 13280 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 49
24 juin 2007 à 15:02
bien vu BN
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
24 juin 2007 à 15:05
Je ne me suis encore pas arraché un neurone sur ce coup.

ciao...
BruNews, MVP VC++
0
cs_Marcial Messages postés 57 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 31 juillet 2008
24 juin 2007 à 17:30
Bon,
j'ai eu du mal a trouver, mais ça y est...
la convention d'appel de la dll est cdecl...
(j'ai tourver l'info dans le commentaire d'une source...lol...
Si y'en a un qui me dit que je cherche pas avant de demander
je lui arrache les yeux  lol)

Je ne l'ai pas encore vraiment parcouru, mais il semble que
cette source apporteras une réponce a mon problème...
Apparement l'astuce consiste a utiliser msvcrt.dll pour
obtenir un handle.

Je posterais dès que j'en saurait plus sur le sujet....

Par contre je n'ai pas compris ou trouver dans une dll décompilée,
la différence entre une dll en convention stdcall et cdecl...
(j'utilise windasm...il m'en faut peut etre un autre...?)
J'ai aussi un peu chercher dans la source de ogg.dll pour
voir si je trouvais quelque chose en rapport avec les conventions
d'appel mais je n'ai pas trouvé.
Si tu pouvait m'éclairer sur ce point ce serait super cool...

En tout cas je te remerci pour ton aide...
Tu ne t'ai pas arraché un neurone  mais ton aide m'a été précieuse...




Merci aussi a toi PCPT...




___________________________________________
Le plus grand des défauts de l'homme c'est de toujours
pointer un doigt accusateur... Mais jaimais devant un miroir...
___________________________________________
0
cs_Marcial Messages postés 57 Date d'inscription samedi 3 mai 2003 Statut Membre Dernière intervention 31 juillet 2008
24 juin 2007 à 17:57
j'y pense tite question,
pensez vous qu'il soit possible de modifier facilement les
sources de vorbisfile.dll pour passer la convention d'appel
en stdcall ?? ou cela est il  fastidieux et complex ??




___________________________________________
Le plus grand des défauts de l'homme c'est de toujours
pointer un doigt accusateur... Mais jaimais devant un miroir...
___________________________________________
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
24 juin 2007 à 18:05
Une dll est un binaire qui fournit des fonctions à certaines adresses (offset dans le binaire exécutable).
Tu localises dans le listing asm (issu de windasm ou autre) un point d'entrée d'une fonction prenant des params et tu vérifies comment la func accède aux params et comment elle finit,
Exemple: DWORD fAdd (param INT, param INT)

si tu vois:
mov eax, [esp+4]
add eax, [esp+8]
ret 8
STDCALL (params sur pile et func dépile)

mov eax, [esp+4]
add eax, [esp+8]
ret 0
CDECL (params sur pile et func laisse appelant dépiler)

lea eax, [ecx+edx]
ret 0
FASTCALL (params en registre et rien à dépiler ici)

etc...

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21041 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019 19
24 juin 2007 à 18:07
modifier la DLL est chose délicate et au vu de tes questions précédentes, ça me semble hors de tes compétences.

Le mieux est de compiler une DLL qui te servira de wrapper en exportant stdcall pour ton VB et qui fera l'appel vers la DLL originale en CDECL.

ciao...
BruNews, MVP VC++
0