Vb et Dll Delphi 5

Le
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
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-marc
Le #15392451
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_' ;
pascal1967
Le #15392341
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;
{******************************}
touriste
Le #15392331
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
pascal1967
Le #15392321
bonne idée mais pas la solution...
Jean-marc
Le #15392311
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_' ;
pascal1967
Le #15392281
Il semblerait qu'il faille écrire
function result_algo(data0,data1,data2,data3,data4:pchar):pchar;stdcall;
Publicité
Poster une réponse
Anonyme