bonjour,

j essaie d utiliser une dll que je devellope en c++ a partir d une appli existante en delphi et j ai un pb qui me *tracasse* depuis pas mal de temps.

cela se passe ds les fonctions qui travaillent sur des pointeurs. les objets pointés semblent se modifier en cours d execution. voila un petit resume de la chose:

ds l appli delphi:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
var
  ref : Pointer;
 
  begin
    ref:=CreateTimer(index);
    ResetTimer(ref);
  end;
les prototypes sont:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
  CreateTimer:=Function(index : Integer) : Pointer cdelc;
  ResetTimer:=Function(instance : Pointer) : Integer cdelc;
ds la dll:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
void * CreateTimer(int _index) {
  Timer * result=new Timer(_index);
  return ((void *) (result));
}  
 
int ResetTimer(void * instance) {
  writeOnConsole(((Timer *) (instance))->getIndex());
  writeOnConsole(((Timer *) (instance))->getIndex());
  writeOnConsole(((Timer *) (instance))->getIndex());
  writeOnConsole(((Timer *) (instance))->getIndex());
  return 0;
}
et ce qui se passe c est qu en general, entre les differents affichages de l index ds la DLL celui ci change. Dans mes tests, je l initialise a 44, et il passe la fois d apres a 2 puis a 1... (qqsoit la valeur initiale, il passe toujours a 2 puis a 1).

je ne sais pas si c etait tres clair.. mais c est la premiere fois que j essaie de faire passer des pointeurs d une dll a l exterieur.. et peut etre que qqn aura une solution...

NB: j ai aussi tente d utiliser des Timer * au lieu de void * ds les prototypes des fonctions de la DLL et il y a tjrs les memes pbs..