Bonjour à tous et toutes.
J'essaye de développer un soft en Delphi ( avec Delphi 2005 ) qui gère une communication via le port USB vers un CP2102 de Silicon Labs ( c'est un adaptateur UART - USB qu'on place à la suite d'un microcontrôleur ).

Silicon Labs me fourni un ficher dll avec des API pour gérer cette liaison USB.
La dll est écrite en C++ et je suis confronté à un problème quand j'utilise une des fonctions de cette dll.

Voici le prototype de la fonction de la dll :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
SI_STATUS SI_Write (HANDLE Handle, LPVOID Buffer, DWORD NumBytesToWrite, DWORD *NumBytesWritten);
 
typedef unsigned long DWORD;
typedef void far         *LPVOID;
typedef int                SI_STATUS;

et voici le code que j'utilise :

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
interface
...
  const
    function SI_Write( Handle : Longword; Buffer : Pointer; NumBytesToWrite : Longword; NumBytesWritten : Pointer ) : Integer; stdcall; external NomDLLUSB;
...
procedure TForm1.WriteUSBClick(Sender: TObject);
    var NumBytesWritten : Longword;
    begin
        if LedOpenSuccess.Active = True then
        begin
            FBufferOUT[0] := $30;
            FBufferOUT[1] := $31;
            FBufferOUT[2] := $32;
            FBufferOUT[3] := $33;
            FBufferOUT[4] := $34;
            FBufferOUT[5] := $35;
            FBufferOUT[6] := $36;
            FBufferOUT[7] := $37;
            FBufferOUT[8] := $38;
            FBufferOUT[9] := $39;
            status := SI_Write( USBDevice, @FBufferOut, 10, @NumBytesWritten );
        end;
    end;
Quand je lance en fesant Exécuter/Exécuter sans déboguer et que l'appuis sur le bouton WriteUSB, je vois que l'envoi s'effectue correctement sur l'usb ( avec un sniffeur ) mais le soft me met le message d'erreur "Exception externe C000001E".

J'ai pensé à un mauvais passage de paramètre, j'ai essayé tous les types de pointeur, mais j'ai toujours la même erreur. Est ce que quelqu'un peut m'aider à résoudre ce problème?