EXTRACT ID3 TAG V1 ET V2

cs_guillaumeM Messages postés 4 Date d'inscription mardi 30 juillet 2002 Statut Membre Dernière intervention 9 juin 2004 - 9 juin 2004 à 11:41
capgil Messages postés 1 Date d'inscription samedi 13 mai 2006 Statut Membre Dernière intervention 24 mai 2006 - 24 mai 2006 à 02:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/19383-extract-id3-tag-v1-et-v2

capgil Messages postés 1 Date d'inscription samedi 13 mai 2006 Statut Membre Dernière intervention 24 mai 2006
24 mai 2006 à 02:05
Cela fait assez longtemps (pas loin de 10 ans...) que j'ai plus fait de dll, j'espère que je vais pas dire trop de betises ;). Quand j'aurai un peu de temps, je posterai ici une conversion complète et opérationnelle avec applications de test (C (Win32 Console) et C++ (MFC)). D'ici là je vous laisse quelques pistes pour y arriver par vos propres moyens.

Ce qui suit devrait permettre de faire une DLL et une application qui utilise la dll en compilant le tout avec Visual C++. Si vous utilisez un autre compilateur, il faudra sans doute modifier les directives contenant __cplusplus et __declspec(...) qui sont, si ma mémoire est bonne, specifiques au compilateur de Microsoft.

Par sécurité, je vous recommande de fixer l'alignement des structures à 1 octet tant dans la dll que dans l'application, ceci afin d'éviter les débordements. Pour les utilisateurs de VC++, il me semble qu'il suffit d'ajouter #pragma pack 1 dans le fichier d'en-tête commun à la dll et à l'application, avant d'attaquer les declarations de structure, sinon il reste toujours la possibilité de le définir au niveau du projet.

Il y aura bien sûr deux projets différents celui de la dll propremement dite et celui de l'application qui l'utilise. Pour les utilisateurs de Visual C++, créez votre dll en utilisant un projet de dll (vu que le source original est écrit en C pur sucre, préférez l'assistant DLL Win32 s'il existe encore ;) ) et votre application avec l'assistant qui va bien. Dans le projet d'application il vous faudra ajouter la lib de la dll si vous choisissez un link statique. Vous pouvez bien entendu passer par un link full dynamique mais vous devrez alors reprototyper toutes les fonctions que vous utilisez dans la dll en pointeur sur fonction, et vous découvrirez alors (si vous ne connaissez pas) les joies du LoadLibrary et du GetProcAddress.

Pour la transformation en dll, il faut modifier quelque peu le source

Pour bien faire les choses:

Il faut eclater le fichier c en 3 fichiers

- le fichier header commun à la dll et aux applications:
======================================================

Il contiendra les prototypes des fonctions de la dll avec les directives de link et d'export qui vont bien. Attention ce fichier ne doit contenir que des déclarations. Typiquement il devra avoir la tête suivante:

// Fichier mydll.h
#ifdef _DLL_NAME_DLL_DEF_
#define _DLL_LINK_DIRECTIVE_ __declspec(dllexport)
#else
#define _DLL_LINK_DIRECTIVE_ __declspec(dllexport)
#endif

// Inclure les bons en-tete
#ifndef __cplusplus
// Include C normaux
#else
// pour les MFC
#include "stdafx.h"
// Pour les autres, je ne sais pas, l'aide de votre compilo est votre amie ;)
#endif

#ifdef __cplusplus // on compile en C++ il faut donc dire au linker que les fonctions sont en C
extern "C" {
#endif // __cplusplus

// declaration des elements exportés par la dll

_DLL_LINK_DIRECTIVE_ typedef struct MyStruct{...};
_DLL_LINK_DIRECTIVE_ ReturnType MyFunction(MyParamType MyParam, ...);

#ifdef __cplusplus
};
#endif // __cplusplus

// Fin du fichier d'en-tête

- Le fichier source de la DLL
============================

Il contient les sources de la DLL proprement dite, c'est à dire le point d'entrée et les fonctions de la DLL, qui seront accessibles depuis les applications appelant la dll. Il devrait ressembler à ça

// Fichier mydll.c

#define _DLL_NAME_DLL_DEF_
#include "mydll.h"

// le point d'entrée
BOOL WINAPI DllMain( HANDLE hModule, DWORD dwReasonToCall, LPVOID lpReserved)
{
switch(dwReasonToCall){
case DLL_PROCESS_ATTACH: // Init sur load par un process
break;
case DLL_PROCESS_DETACH: // Unload by process
break;
case DLL_THREAD_ATTACH: // Init pour un thread
break;
case DLL_THREAD_DETACH: // Unload pour un thread
break;}

return TRUE;
}

// Ensuite les fonctions de la DLL

_DLL_LINK_DIRECTIVE_ ReturnType MyFunction(MyParamType MyParam, ...)
{
// le code de la fonction
}

// Fin du fichier mydll.c

- Enfin le code des applications
=========================================================

En version ultra-simplifiée, Il ressemblera à cela

// myprog.c
#include "mydll.h"

int main (int narg, char** lpargs)
{
// Do the job
}
// Fin du fichier

Voilà, j'espère que ceci vous sera utile, je n'ai malheureusement pas le temps d'aller plus loin sur le sujet pour l'instant. J'ai donné ces indications de mémoire, j'espère qu'elles pourront vous être utiles et que ma mémoire est restée fiable.

Cordialement,

Capgil
cs_benoit1212 Messages postés 2 Date d'inscription mercredi 22 juin 2005 Statut Membre Dernière intervention 2 mars 2006
2 mars 2006 à 18:53
J'ai le compilateur mais comment on fait pour récupérer les tags je comprends pas !
cs_arc59 Messages postés 32 Date d'inscription mardi 15 janvier 2002 Statut Membre Dernière intervention 24 mars 2011
2 mars 2006 à 08:36
il faut que tu compile le fichier c. Pour cela, tu trouvera des compilateur gratuit comme dev c++
Prince_Hogo Messages postés 1 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 1 mars 2006
1 mars 2006 à 20:53
Je ne peux pas m'empêcher de sourire pour le commentaire de "Benoit1212".

Un logiciel pour lancer un fichier .c . Trop XD

M'enfin, éxécuter du code C en direct pourquoi pas, c'est possible .p mais tellement difficile .]
cs_benoit1212 Messages postés 2 Date d'inscription mercredi 22 juin 2005 Statut Membre Dernière intervention 2 mars 2006
28 févr. 2006 à 17:06
Je ne peut pas exécuter le fichier, quel logiciel faut-il pour le .c ???????
cs_Morgue Messages postés 1 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 23 novembre 2004
23 nov. 2004 à 13:54
Tout comme ribos
Encore Merci
cs_ribos Messages postés 53 Date d'inscription samedi 26 juillet 2003 Statut Membre Dernière intervention 27 septembre 2007
2 août 2004 à 02:58
C'est super, je desesperai à enfin trouver des infos là dessus !!
Merci enormement !!
cs_arc59 Messages postés 32 Date d'inscription mardi 15 janvier 2002 Statut Membre Dernière intervention 24 mars 2011
10 juin 2004 à 09:24
Mais de rien. Attention tout de meme aux effets de bord.
Je crois que certaine fonction deconne lorsque les tags du titre par exemple ont une longueur > 30, ce qui est la limite maximum pour les TAG en version 1.
cs_guillaumeM Messages postés 4 Date d'inscription mardi 30 juillet 2002 Statut Membre Dernière intervention 9 juin 2004
9 juin 2004 à 11:41
Oh punaise :-) je cherchait depuis longtemps le moyen de modifier les tags a partir du nom de fichier, eh ben j'ai trouvé merci !
Rejoignez-nous