Sorte de typage dynamique

maxpiton4D Messages postés 16 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 31 mai 2006 - 17 avril 2006 à 11:38
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 17 août 2006 à 15:56
Bonjour à tous,
Comment pourrais-je faire choisir à celui qui utilise ma librairie le type de variable que retournera une fonction?
exemple : Function GetResult(lineNb: integer = -1): Char;
Je vois pas comment je pourrais passer en paramètre le "Char"

7 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
17 avril 2006 à 15:01
pour avoir plusieurs fonctions avec le meme nom mais differents parametres :

function GetResult(args : integer) : char; overload;
function GetResult(args : string) : char; overload;

sinon

procedure GetResult(args : integer; out result : char); overload;
procedure GetResult(args : double; out result : string); overload;
procedure GetResult(args : extended; out resultA: string; out resultB : integer); overload;
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
17 avril 2006 à 16:06
Sinon, si ta fonciton renvoie un type de résultat différent suivant les parametres que tu lui donnes, tu peux renvoyer un pointeur.
Cela fait un peu maché comme travail, mais comme il s'agit ici de librairies (DLL), tu n'as pas d'autre choix.

Allez, un exemple pour la route:
<hr size= "2" width="100%">{ Fonction dans ta librairie. }
function MyFunc(P: Integer): Pointer; stdcall;
var
I: PInteger;
begin
case P of
0: Result : = PChar('OK');
1:
begin
New(I);
I^ := 8;
Result := @I;
end;
end;
end;
Voila. Cette fonction te renvoie la chaîne OK si P 0 ou le nombre 8 si P 1.
<hr size="2" width="100%">
Mais, en principe, une fonction ne doit pouvoir renvoyer qu'un type de résultat.
C'est bizarre que tu aies besoin d'une telle fonction. Tu pourrais nous dire à quoi elle servirait ? Car, si ca se trouve (et c'est même quasi-sûr), il y a moyen de faire beaucoup plus simple.

++

@ F0xi: les deux premières lignes que tu proposent ne vont pas. Notre ami demande comment faire varier le résultat et non les parametres. Dans ce cas-là, la directive 'overload' ne fonctionne pas.

Pour les trois autres solutions: c'est à méditer. Mais je ne suis pas sûr que ça passe (je parle des parametres de sortie) à travers une DLL (tout comme le type string ...)

Si tu ne te plantes pas ......
tu ne pousseras jamais
0
maxpiton4D Messages postés 16 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 31 mai 2006
17 avril 2006 à 18:56
Merci pour vos réponses
En fait j'en ai besoin car cette fonction récupere le résultat d'une requete sql, et le champ sql peut être de plusieurs types...
Je vais essayer avec ce que vous m'avez dit je verrais bien
sinon, d'autres idées ?
0
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
17 avril 2006 à 19:07
Function GetResult(lineNb: integer = -1): OleVariant; tu peux toujours essayé
0

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

Posez votre question
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
17 avril 2006 à 19:09
euh utilise l'aide de Delphi pour plus d'info concernant la différence en Variant & OleVariant !!!
0
maxpiton4D Messages postés 16 Date d'inscription jeudi 5 février 2004 Statut Membre Dernière intervention 31 mai 2006
19 avril 2006 à 12:01
bon en fait erreur de ma part...
désolé
Le type ne change jamais, c'est un Char
merci quand même
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
17 août 2006 à 15:56
le sujet est depassé, mais une solution consisterai a passe ton retour en var. comme un exemple vaut plus que de longues explications:

function getResult(args: integer):Char;
function getResult(args: integer):Extended;

devient

procedure GetResult(args: integer; var retour: char); overload;
procedure GetResult(args: integer; var retour: Extended); overload;
0
Rejoignez-nous