Salut à tous,
dans mon dernier post Exe joue DLL j'ai opté pour la solution donné par henderson (d'ailleur petit mot pour henderson : à cause d'un petit projet intermédiaire pour un ami je n'ai toujours pas pu avancer...) mais qui pour l'instant n'as pas abouti. Je vous conseille d'aller voir la solution donnée par henderson dans ce post afin de mieux comprendre celui-ci..
Mon but est de vérifier si un codec vidéo (en l'occurence DivX 5.2) est installé. Suite à quelques recherches infructueuses et un bon coup de pouce de HW (cf. ICI) j'ai trouvé les fonctions de l'API Windows à utiliser.
Seulement la fonction ICOpenFunction demande une fonction dans le style CALLBACK (je dit dans le style car je ne suis pas sûr de la définition de CALLBACK).
Si je passe NULL comme paramètre (car je n'utilise pas la fonction), Windows ne charge pas le codec et je ne peux donc pas récupérer les informations dont j'ai besoin. J'ai donc déclaré ma fonction, cette fois-ci le __stdcall est imposé par l'API Windows.
Lors de l'éxécution j'obtient exactement le même problème qu'avec la solution de henderson (qui en théorie devrait marcher, qui marche chez lui mais pas chez moi) : violation d'accès à l'adresse 0000000 ce qui est en fait dû à un trop grand nombre d'exception.
Le code utilisé :
Là j'avoue ne plus trop savoir comment m'en sortir...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 int __stdcall Test ( void ) { return 0; } void __fastcall TForm1::Button1Click(TObject *Sender) { ICINFO ic_infos; HIC hic; int i = 0; while ( ICInfo( 0, i, &ic_infos ) ) { // Ouverture du driver pour plus d'infos hic = ICOpenFunction( ic_infos.fccType, ic_infos.fccHandler, ICMODE_QUERY, &Test ); // La violation d'accès à lieu sur cette ligne ! if ( hic != 0 ) { ICGetInfo( &hic, &ic_infos, sizeof(ICINFO) ); ListBox1->Items->Add( ic_infos.szName ); ICClose( &hic ); } else ListBox1->Items->Add("Ne peut pas ouvrir"); ListBox1->Items->Add("---------------------------------"); i++; } }
Merci d'avance pour votre aide !
Partager