EXTRACT ID3 TAG V1 ET V2

Signaler
Messages postés
4
Date d'inscription
mardi 30 juillet 2002
Statut
Membre
Dernière intervention
9 juin 2004
-
Messages postés
1
Date d'inscription
samedi 13 mai 2006
Statut
Membre
Dernière intervention
24 mai 2006
-
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

Messages postés
1
Date d'inscription
samedi 13 mai 2006
Statut
Membre
Dernière intervention
24 mai 2006

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
Messages postés
2
Date d'inscription
mercredi 22 juin 2005
Statut
Membre
Dernière intervention
2 mars 2006

J'ai le compilateur mais comment on fait pour récupérer les tags je comprends pas !
Messages postés
32
Date d'inscription
mardi 15 janvier 2002
Statut
Membre
Dernière intervention
24 mars 2011

il faut que tu compile le fichier c. Pour cela, tu trouvera des compilateur gratuit comme dev c++
Messages postés
1
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
1 mars 2006

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 .]
Afficher les 9 commentaires