Newby vs. dll

Résolu
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 8 déc. 2004 à 19:24
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 - 11 déc. 2004 à 10:07
Salut a tous,

Je suis un pur newby, et je me retrouve en train d'essayer de pondre une dll avec delphi 7. Jusque là ca va, j'ai suivi des tutos de ci, de là.

Mais soudain, un probleme : J'ai une fonction qui lit 4 parametres en entrée et qui me retourne 2 valeurs reélles.

Et mon problème est : comment faire une dll de cette fonction ? Procedure ou function, quel passage de parametre, comment faire pour récuperer dans deux variables du programme appelant les valeurs dont j'ai besoin.

voili voilou....

A l'aide...

7 réponses

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
9 déc. 2004 à 00:58
GrandVizir : tu as écris "Je ne vois que ça !"

Ben, je ne suis pas d'accord avec toi. As-tu pensé à utiliser une procédure avec des paramètres var ?

procedure Proc(P1,P2: int 64; var P3,P4, P5, P6:Int64);


Dans ce cas, P3..P6 seront les valeurs à retourner à la procédure appelante.

Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
May Delphi be with you
3
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
8 déc. 2004 à 20:19
Dans ton fichier DPR en mode library:

type TResultat = record
e1, e2 : extended;
end;

function Fct(P1,P2,P3,P4:Int64):TResultat;
var R : TResultat;
begin
  R.e1:=int(P1+P2);
  R.e2:=int(P3+P4); //du blabla quoi !
  Fct:=R;
end;
exports Fct;


Pour appeler ta fonction, déclare la suite avant IMPLEMENTATION dans un autre projet. Et n'oublie pas de recopier la structure record afin que TResultat soit reconnue.

function Fct(P1,P2,P3,P4:Int64):TResultat; far; external 'dll.dll';


Après... c'est facile.

Je ne vois que ça !

===========
Validez les réponses si ok...

ViewVite : HTML - ZIP
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
8 déc. 2004 à 21:37
Ah oui... okich... mais ca evoque un doute soudain, si cette dll je souhaite l'appeler depuis un prog pas écrit en delphi, le type Trésultat risque de poser probleme, non ?
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
9 déc. 2004 à 18:07
[DP]
Le VAR dépend de l'usage que l'on veut bien faire de lui. Je n'utilise que "const" dans le paramétrage des DLL. Passer un Integer ne nécessite pas de "var", les PChar non plus... les String (eux) ne passent pas !

Si on regarde dans Windows.pas, il n'y a pas souvent de "var" dans les déclarations vers Kernel par exemple. On se retrouve toujours avec des structures.

Je part du principe que: si je veux modifier le paramètre, je met VAR. En revanche, si le paramètre ne me sert qu'à obtenir une donnée, le VAR saute.

Il me semblait ici qu'il voulait retourner 3 résultats en 1. Un record (issu de STRUCT du C++) fait donc ici office de résultat. Si maintenant, il voulait modifier direct les paramètres de DLL, alors ok! il mettra le VAR.

[DeltaFX]

Le Record ne pose pas de problème. Les structures existent dans tous les langages. Seule dans les compilateurs la déclaration varie, mais au final tout se retrouve universalisé dans l'EXE.

Tu développe en Delphi: l'EXE finit en binaire. Tu développe en C++: l'exe se retrouve en binaire. Et il n'y a pas de problème !

Si tu voulais déclarer ton TResultat en C++, tu aurais écrit:
struct TResultat = {
  float e1, e2;
}

Tu vois le genre de truc. J'ai soudain un doute avec le signe '='.

Windows est fait en C++. Cela ne t'as pas empêché de faire du Delphi... En revanche, il existe en effet des subtilités. En développant une DLL en Delphi, avec Delphi il sera possible de gérer les exceptions subies par la DLL Delphi. C'est impossible en C++ utilisant une DLL Delphi. Il y a quelques trucs bizarres dans cette optique.

:big)

===========
Validez les réponses si ok...

ViewVite : HTML - ZIP
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
9 déc. 2004 à 21:26
GrandVizir : un petit ajustement de vocabulaire est nécessaire.
Passer un Integer ne nécessite pas de "var", les PChar non plus... les String (eux) ne passent pas !

Que les PChar ne nécessitent pas d'être passés comme var coule de source puisqu'il s'agit d'une adresse !
Le mot réservé Var sert précisément à indiquer à la procédure appelée qu'on lui passe une adresse et non une copie de la variable.

Comme démonstration de ce principe, essaie donc le code suivant et tu verras
procedure VarParams(var a: integer; b: integer);
begin
  a := 3;
  b := 4;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  a, b: integer;
begin
  a := 1;
  b := 2;  ShowMessageFmt('Avant : A %d, B %d', [a, b]);
  VarParams(a, b);  ShowMessageFmt('Après : A %d, B %d', [a, b]);
end;


Est-ce suffisamment démonstratif ?
May Delphi be with you
0
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
10 déc. 2004 à 18:03
:sleepy)

===========
Validez les réponses si ok...

ViewVite : HTML - ZIP
0
DeltaFX Messages postés 449 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 8 avril 2009 2
11 déc. 2004 à 10:07
Merci a tous :) j'ai tout ce qui faut pour réapprendre a coder :D
0
Rejoignez-nous