Utilisation d'une DLL en C avec VB.net

legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009 - 6 avril 2009 à 22:13
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 - 7 avril 2009 à 22:10
->Salut à tous, j'ai une DLL qui demande le nom d'un fichier à l'entrée et le nom d'un fichier pour la sortie. Cette DLL fait le tri croissant numériue d'opération sur une CNC en se basant sur les coordonnées en x et en y de chacune des opération. Je doit faire cette opération pour un programme en VB et je me demande ce que je fait de pas correct! Pour le programme en VB, j'avait inscrit la commande suivante dans le module:
->Declare Function lecture Lib "C:\...\triage.dll" (ByRef fichierin As String, ByRef fichierout As String) End Module
->Puis, je fait appel à cette dernière de la façon suivante dans un form:
->Dim test1 As String test1 cheminacces & "temp.for" Dim test2 As String test2 cheminacces & codeclient lecture(test1, test2)
->Finalement, voici l'entête de cette DLL (en C):
->void __stdcall lecture(char *nomficin,char *nomficout)
->Le problème est assurément pas la DLL puisqu'elle fonctionnait dans un programme en C. Si vous voyez une erreur ou si vous avez une suggestion quelconque d'une fonction de tri qui existe déjà!!! Merci, Padp

4 réponses

lesdis Messages postés 403 Date d'inscription mercredi 19 avril 2006 Statut Membre Dernière intervention 7 août 2020
7 avril 2009 à 10:37
Bonjour,

Aie!! mes n'oeils!!

Quel est l'erreur?

Bonne Prog
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
Modifié par NHenry le 31/07/2016 à 18:10
Généralement les chaines de caractères sont passées par valeur à une DLL

Essaye avec ceci :
Declare Function lecture Lib "C:\...\triage.dll" (ByVal fichierin As String, ByVal fichierout As String)

Une variable String en VB est en fait un pointeur déguisé sur une zone mémoire contenant la chaine réelle. D'où le passage par valeur.

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
legaultp Messages postés 7 Date d'inscription mercredi 25 février 2009 Statut Membre Dernière intervention 8 avril 2009
7 avril 2009 à 21:48
OK! Merci pour la précision sur les string en VB, je ne le savais pas!
Toutefois, j'ai essayer et il arrive alors le message d'erreur suivant:

{"Restriction PInvoke : impossible de retourner des variants."}

Pourtant, ma DLL ne tente pas de retourner de valeur???

Pascal
0
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
Modifié par NHenry le 31/07/2016 à 18:11
Ah ben si, tu l'as déclarée comme Function.
En C effectivement elle ne retourne rien, il faut donc la déclarée comme Sub

---- Sevyc64  (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #   
0
Rejoignez-nous