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 :

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
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.

Maintenant j'ai besoin d'appeler une autre méthode qui elle doit me rendre un résultat de type "PChar" : code delphi :
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 ...
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
    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)
ça me renvoi un
Nom : Capture.JPG
Affichages : 197
Taille : 40,8 Ko

(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 :
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)
J'ai alors l'erreur suivante :
Nom : Capture.JPG
Affichages : 164
Taille : 39,6 Ko

Merci