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 :
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".
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;
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?
Partager