Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Vb et Dll Delphi 5

6 réponses
Avatar
pascal1967
Bonjour,
Je dois utiliser à partir de Vb (ou Access) la fonction algo() d'une Dll
Delphi selon :
function algo(data0,data1,data2,data3,data4:pchar):pchar;

Pour cela je déclare selon :
Public Declare Function algo Lib "Algo.dll" (ByVal data0 As String, ByVal
data1 As String, ByVal data2 As String, ByVal data3 As String, ByVal data4 As
String) As String

Avec l'appel :
Dim MyStr$
MyStr$ = algo("1", "a", "b", "c", "d")

Ce qui provoque un plantage !!
Que dois-je corriger ???
D'avance merci

6 réponses

Avatar
Jean-marc
pascal1967 wrote:
Bonjour,
Je dois utiliser à partir de Vb (ou Access) la fonction algo() d'une
Dll Delphi selon :
function algo(data0,data1,data2,data3,data4:pchar):pchar;

Pour cela je déclare selon :
Public Declare Function algo Lib "Algo.dll" (ByVal data0 As String,
ByVal data1 As String, ByVal data2 As String, ByVal data3 As String,
ByVal data4 As String) As String

Avec l'appel :
Dim MyStr$
MyStr$ = algo("1", "a", "b", "c", "d")

Ce qui provoque un plantage !!
Que dois-je corriger ???
D'avance merci



A voir avec le concepteur de la dll.
Sinon, des infos ici dans la FAQ:
http://faq.vb.free.fr/index.php?question4
En fin d'article, il y a des tas de liens vers des ressources utiles.


--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
pascal1967
Malheureusement le concepteur est parti élever des chèvres dans le Larzac !!
J'ai le code par contre si ça peut aider :


unit Ualgo;

interface

uses
SysUtils, Registry;

Var
Alias , Table_Client, Mat: String;

function result_algo(data0,data1,data2,data3,data4:pchar):pchar;

{******************************}
function result_algo(data0,data1,data2,data3,data4:Pchar):Pchar;

var
field1,field2,field3,field4:string;
numero:integer;
resultat:string;

Presultat:Array[0..255]OF char;

Begin
numero:=strtoint(strpas(data0));
field1:=strpas(data1);
field2:=strpas(data2);
field3:=strpas(data3);
field4:=strpas(data4);

case numero of
1:resultat:Êlcul_algo1(field1,field2,field3,field4);
2:resultat:Êlcul_algo2(field1,field2,field3,field4);
3:resultat:Êlcul_algo3(field1,field2,field3,field4);
end;


StrPcopy(Presultat,resultat);
result_algo:=presultat;
End;
{******************************}
Avatar
touriste
Bonjour,

A vérifier mais je gros que delphi n'utilise pas les conventions d'appel
Standard Call, et que les paramètre passés sont empilés à l'envers.

Christophe
Avatar
pascal1967
bonne idée mais pas la solution...
Avatar
Jean-marc
pascal1967 wrote:
bonne idée mais pas la solution...



Poser la question sur un forum Delphi, pourquoi pas?

Autre solution, lourde mais élégante à la fois:

Faire une Dll en C qui invoque la dll en Delphi: pour ça, tu trouveras de
l'aide
sur un froum Delphi, ils font surement ça de temps en temps, comme tout
le monde.

Une fois que tu as ta Dll en C, reviens ici: on sait appeler des Dll en C
depuis
VB.

--
Jean-marc Noury (jean_marc_n2)
Microsoft MVP - Visual Basic
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Avatar
pascal1967
Il semblerait qu'il faille écrire
function result_algo(data0,data1,data2,data3,data4:pchar):pchar;stdcall;