utiliser une dll avec des fonctions en C en vb.net
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:
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:
1 2
| short GetApiVersionEx (int *piMajorVersion,
int *piMinorVersion); |
Code:
1 2 3
| short StartEx (const char *szPortName,
ULONG ulComSpeed,
CSC_HANDLE *pApiHandle); |
avec comme info dans le doc:
Citation:
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