2 pièce(s) jointe(s)
Utilisation d'une dll Delphi10 sous VB.net
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:
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:
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:
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
Pièce jointe 419702
(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:
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 :
Pièce jointe 419974
Merci :)