Bonjour,
Je dois utiliser une dll écrite en Delphi10 dans une application VB.net, j'arrive à accéder à certaines fonctions de cette dll (une, pour l'instant ), mais pas vraiment à ce dont j'ai besoin.
Ce que j'arrive à faire :
La dll delphi est appelée et la methode SmartKeyAbout se lance, elle ouvre une fenêtre, et le comportement de cette fenêtre est correct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Public Class Form1 Declare Auto Sub SmartkeyAbout Lib "E:\DLL References\smDll.dll" (obj As Object) Private Sub Button1_Click() Handles Button1.Click SmartkeyAbout(Me.Handle) End Sub End class
Maintenant j'ai besoin d'appeler une autre méthode qui elle doit me rendre un résultat de type "PChar" : code delphi :
Quand j'essaye de l'appeler et d'afficher son résultat en faisant par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function SmartkeyGetOption(ProgOption: Integer): PChar; stdcall; function SmartkeyGetOption(ProgOption: Integer): PChar; var key: string[20]; Idx,rc: Integer; begin // suite du code de la fonction ...
ça me renvoi un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Declare Auto Function SmartkeyGetOption Lib "E:\DLL References\smDll.dll" (obj As Integer) As IntPtr Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim sResult As String sResult = Marshal.PtrToStringAuto(SmartkeyGetOption(3)) MsgBox(sResult)
(le bout de code utilisant le IntPtr et Marshal.PtrToStringAuto vient de là : https://www.developpez.net/forums/d1...et-dll-delphi/, où un ancien collègue avait déjà essayé de se frotter au pb)...
Je n'y connais strictement rien en Delphi... Toute aide est la bienvenue, y compris des liens vers tuto expliquant comment faire dialoguer les deux univers vb.net et delphi10
UPDATE:
Dans la section Delphi de ce forum on m'a fait remarquer que la fonction delphi renvoi un pointeur de chaine, si je modifie mon code ce cette façon :
J'ai alors l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Declare Auto Function SmartkeyGetOption Lib "E:\DLL References\smDll.dll" (ByVal obj As Integer) As Object 'et que je l'execute via : Dim result As Object result = SmartkeyGetOption(var)
Merci
Partager