Utilisation d'une dll ecrite en C++ avec delphi

Résolu
gilch Messages postés 18 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 15 avril 2013 - 17 oct. 2006 à 14:01
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 - 6 nov. 2006 à 10:09
Bonjour,
j'utilise une dll ecrite en C++ sous delphi, le fonctionement est ok mais j'ai un pb avec
la declaration d'une fonction.
Dans le programme C++ qui utilise aussi cette dll, la fonction est declarée comme suit:

EXDLL_DECL int EXRead(WORD *object, BYTE *format, BYTE **repBuffer, WORD *repBufferSize);

Je n'arrive pas a déclarer correctement les pointeurs sur mon appli en delphi, quelqu'un peut t'il me dire comment ecrire cette fonction sous delphi??

J'ai essayé avec:
Function EXread(Object: word; format : byte ; repbuffer : word ; repbuffersize: word):integer;CDECL;external "EX.dll";

Mais ce n'est pas concluant.......

Merci d'avance

4 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
17 oct. 2006 à 19:04
Salut,


Function EXread(var Object: word; var  format : byte ;  var
repbuffer : word ; repbuffersize: ^^word):integer;CDECL;external
"EX.dll";


Le var pour le passage par référence. Donc revenant à un passage de pointeurs.


Pour le ^^word, je suis pas sur et je le sens pas trops, et j'ai pas
Delphi sous la main... Mais tu dois pouvoir faire qqch comme ça :


type PWord = ^Word;

type PPWord = ^PWord;


Puis :


Function EXread(var Object: word; var  format : byte ;  var repbuffer :
word ; repbuffersize: PPWord):integer;CDECL;external "EX.dll";


Le tout avec réserve.


@+
<hr size="2" width="100%" />Je suis en deuxième
année en école d'ingénieur et passionné de développement logiciel sous
D7 et VB6. Je cherche un stage en entreprise sur Paris de début avril à
fin juillet 2007.
3
gilch Messages postés 18 Date d'inscription samedi 6 septembre 2003 Statut Membre Dernière intervention 15 avril 2013
19 oct. 2006 à 17:04
Grand merci pour ton aide, ca fonctionne bcp mieux ainsi.
Pour le pointeur de pointer, je m'en suis sorti avec un "bytearray".
Pour le reste c nickel, plus qu'une fonction et c'est fini grace a to post
encor merci
0
delphi82001 Messages postés 3 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 6 novembre 2006
6 nov. 2006 à 05:23
Salut...,
    j'utilise une dll ecrite en C++,
 dans delphi,
la declaration des  fonctions de la DLL dans delphi fait erreur ;.
le code source c++ de la function :

DEFRAG_API int RunDefrag(char *MountPoint, int Mode) {  if ((MountPoint NULL) || (*MountPoint '\0')) {
      DefragAllDisks(Mode);
    } else {
      DefragOneDisk(MountPoint,Mode);
      }
  return(0);
  }
le code delphi qui je utilisé est :
Function  RunDefrag(MountPoint : char; Mode:integer):integer;cdecl ; external 'DefragDll.dll' name 'RunDefrag';

mai delphi fait un erreur (violation d'accés a l'adresse 100047b0 ) ,

donne moi une solution ...
merci...
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
6 nov. 2006 à 10:09
Je sais pas ce que veut dire DEFRAG_API.


Pour MountPoint, c'est apparement une chaîne de caractère, donc :


Function  RunDefrag(MountPoint : PChar; Mode:integer):integer;cdecl ; external 'DefragDll.dll' name 'RunDefrag';


Mais j'ai peur que DEFRAG_API soit une convention d'appel. Faudrait savoir précisément sont fonctionnement.
<hr size="2" width="100%" />Je suis en deuxième année en
école d'ingénieur etpassionné de développement logiciel sous D7 et VB6.
Je cherche un stage en entreprise sur Paris de début avril à fin
juillet 2007.
0
Rejoignez-nous