Bonjour,

Je cherche à comprendre comment dialoguer avec une dll codé en C à partir de VB.net.
J'ai bien réussi à faire quelques essai es concluant mais j'ai plus l'impression de faire de la bidouille que de réellement comprendre comment cela fonctionne, en fait la ou je peche c'est sur le type de variable à utiliser, voila ci dessous l'appel à 2 fonctions de la dll qui me retourne un résultat cohérent, mais je me demande quand même si je m'y prend correctement.
Je tiens à préciser que j'ai lu quelques tuto sur le sujet trouvés à l'aide de google mais je reste un peu incertain sur la compréhension que j'ai eu.

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
    <DllImport("totoApi.dll")> _
    Public Shared function GetApiVersionEx(ByRef API_EX_MAJOR_VERSION As Integer, ByRef API_EX_MINOR_VERSION As Integer) As short
End function
 
    <DllImport("totoApi.dll")> _
    Public Shared function StartEx(byval pszComName As string, byval ulSpeed As integer, byref phCsc As integer) As short
End function
 
 
    Dim maj As integer
    Dim min As Integer
    Dim error As short
 
    error = GetApiVersionEx(maj, min)    => ici j'obtiens bien les versions de la dll maj et min, avec "error" = 0 ce qui correspond à un succes de la fonction retourné par la dll
 
 
    Dim x As Integer
    Dim hRw(x) As Integer
 
    error = StartEx("COM4", 0, hRw(x)) => ici j'obtiens "error" = 0 ce qui correspond à un succes de la fonction retourné par la dll et x = 0 ce qui a l'air cohérent
Voici les fonctions tel quel sont déclarées dans la documentation que j'ai ou dans le .h livré avec la dll:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
short   GetApiVersionEx   (int *piMajorVersion,
                                     int *piMinorVersion);

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
short   StartEx           (const char *szPortName,
                                     ULONG ulComSpeed,
                                     CSC_HANDLE *pApiHandle);
avec comme info dans le doc:

szPortName Pointer to a zero-terminated string that specifies the name of the communication port
ulComSpeed Specifies the communication speed, in bits per second, on the serial line
pApiHandle Pointer to a CSC_HANDLE object that is initialized with the handle to the opened logical device.
C'est surtout cette dernière variable "CSC_HANDLE *pApiHandle" que j'ai du mal à comprendre comment la déclarer proprement

J'avais suivi ce tuto https://rp.developpez.com/vb/tutoriels/dll/ mais en suivant le tableau "VI. Correspondance des types" j'aurai eu tendance à déclarer la variable " byval ulSpeed " en Long , mais ca ne fonctionne pas (message d'erreur) pourtant dans le tableau on indique bien qu'un ULONG en C correspond à un Long en VB.net, or cela fonctionne quand je déclare le paramètre en Integer.

Merci pour vos aides et explications.

Cdt,
yaume