Bonjour,
Je dois utiliser la fonction d'une dll en c ou c++. Je n'ai pas la main sur cette dll.
Voici la signature de la fonction(issue du .h) :
Et voici mon code VB.NET pour la déclaration:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 long __cdecl ApintUsb(unsigned long ProductNumber, unsigned long ChannelNumber, char Function[], double In1, double In2, double In3, double In4, double In5, double In6, short int *Out1, short int *Out2, short int *Out3, short int *Out4, short int *Out5, short int *Out6, unsigned short int Array[], long *len);
Et voici un appelle de la fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 <Runtime.InteropServices.DllImport("ap_int_usb", callingconvention:=Runtime.InteropServices.CallingConvention.Cdecl, EntryPoint:="ApintUsb")> _ Private Shared Function ApintUsb _ (ByVal ProductNumber As UInt32, ByVal ChannelNumber As UInt32, ByVal FunctionName As String, _ ByVal In1 As Double, ByVal In2 As Double, ByVal In3 As Double, ByVal In4 As Double, ByVal In5 As Double, ByVal In6 As Double, _ ByRef Out1 As Int16, ByRef Out2 As Int16, ByRef Out3 As Int16, ByRef Out4 As Int16, ByRef Out5 As Int16, ByRef Out6 As Int16, _ ByVal Graphe As UInt16(), ByRef len As Int32) As Boolean End Function
J'ai fait l'application sous Visual Studio 2005(.NET 2)/XP, Visual Studio 2012(.NET 2, 3 et 4)/W7 et à chaque fois la même constatation l'application fonctionne sous XP et lève une AccessViolationExeption sous W7. Une application que je n'ai pas fait et qui utilise la même DLL fonctionne sous W7. donc le problème semble venir de mon application et non de la DLL.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Dim temp As UInt16() = {0, 0} Dim cd As Boolean = ApintUsb(1, 0, "Init usb", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, temp, 0)
Merci d'avance pour votre aide.
Partager