Bonjour,

Je souhaite utiliser les API de Windows pour récupérer la liste des périphériques de capture disponibles.

Voici mon code :
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
 
function capGetDriverDescriptionA(wDriverIndex:Word; lpszName:PAnsiChar; cbName:Integer; lpszVer:PAnsiChar; cbVer:Integer):Boolean; stdcall; external 'avicap32.dll';
 
function GetDriverList:TStringList;
var
     wIndex : Word;
     szDeviceName : PAnsiChar;
     szDeviceVersion : PAnsiChar;
begin
     FillChar(szDeviceName, 80, 0);
     FillChar(szDeviceVersion, 80, 0);
     Result := TStringList.Create;
     for wIndex:=0 to 9 do
     begin
          if capGetDriverDescriptionA(wIndex, szDeviceName, 80, szDeviceVersion, 80) then
               Result.Add(szDeviceName + ' ' + szDeviceVersion)
          else
               Break;
     end;
end;
Le problème, c'est que j'ai, à la sortie de ma fonction une erreur :
access violation at 0x00000000: read of address 0x00000000
J'ai également essayé avec le code suivant :
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
 
function GetDriverList:TStrings;
var
     wIndex : Word;
     szDeviceName : PAnsiChar;
     szDeviceVersion : PAnsiChar;
begin
     Result := TStringList.Create;
     for wIndex:=0 to 9 do
     begin
          if capGetDriverDescriptionA(wIndex, szDeviceName, 80, szDeviceVersion, 80) then
               Result.Add(StrPas(szDeviceName) + ' ' + StrPas(szDeviceVersion))
          else
               Break;
     end;
end;
Là, j'ai une erreur :
Exception 'first chance' à $7687B727. Classe d'exception EAccessViolation avec un message 'Violation d'accès à l'adresse 7689DBEF dans le module 'KERNELBASE.dll'. Ecriture de l'adresse 12E8FEDC'. Processus WebCam.exe (7240)
Pouvez-vous m'aider à corriger ce problème ?

Merci,
ZiP