Shared memory en c++ et delphi :( GlobalAlloc, GlobalLock, etc...

Shared memory en c++ et delphi :( GlobalAlloc, GlobalLock, etc... - C++ - Programmation

Marsh Posté le 20-07-2003 à 19:45:23    

J'ai besoin de partager une variable entre un programme delphi et un programme C++ compilé comme une DLL.
 
Ca plante au moment de l'appel dans la DLL :'(
 
Dans le programme delphi je fais :

Code :
  1. procedure doChangeInt( p : THandle) ; stdcall; external 'occt.dll' name 'stop';
  2. procedure TForm1.Button1Click(Sender: TObject);
  3. var
  4. temp : THandle;
  5. myint: PInteger;
  6. begin
  7. Temp := GlobalAlloc(GMEM_MOVEABLE,4);
  8. DoChangeInt(Temp);
  9. myint := GlobalLock(Temp);
  10. Edit1.Text := IntToStr(myint^);
  11. GlobalUnlock(Temp);
  12. end;


 
Dans la DLL C++ je fais
 

Code :
  1. void stop(HGLOBAL i)
  2. {
  3.     int* myint;
  4.     myint = (int*)::GlobalLock(i);
  5.     *myint=2;
  6. GlobalUnlock(i);
  7. }


 
C'est juste a des fins de test, j'essaie de mettre a jour une variable partagée dans la DLL...
 
Et ca plante.
 
application defined exception 0xc000001d at 0X0012f540
 
Vous auriez une idée sur le pourquoi du comment ?

Reply

Marsh Posté le 20-07-2003 à 19:45:23   

Reply

Marsh Posté le 20-07-2003 à 20:03:06    

- Vérifie que la fonction exportée 'stop' de ta DLL s'appelle bien 'stop'
- Si c'est bon, vérifie les conventions d'appels
 
Ah oui, il manque te manque un GlobalFree(Temp) dans ton code delphi et pense à vérifier le code de retour des fonctions..

Reply

Marsh Posté le 20-07-2003 à 20:05:29    

*Syl* a écrit :

- Vérifie que la fonction exportée 'stop' de ta DLL s'appelle bien 'stop'
- Si c'est bon, vérifie les conventions d'appels
 
Ah oui, il manque te manque un GlobalFree(Temp) dans ton code delphi et pense à vérifier le code de retour des fonctions..


 
-ouip c'est bon :/
-Conventions d'appel ?  
 
Mercii pour le GlobalFree, et le code de  retour de mes fonctions, finalement, ca peux chier que dans C++, vu que en Delphi ca marche nickel, si je vire l'appel a  la DLL.
 
je vais essayer avec des returns de vérifier le tout...

Reply

Marsh Posté le 20-07-2003 à 20:25:51    

Ca plante lors du GlobalUnlock dans la DLL :??: :??: :??:


Message édité par Tetedeiench le 20-07-2003 à 20:26:00
Reply

Marsh Posté le 20-07-2003 à 20:28:50    

OK, fallait juste préciser __stdcall dans la fonction dans la DLL et ca marche.
 
Comme quoi.

Reply

Marsh Posté le 20-07-2003 à 20:53:35    

tetedeiench a écrit :

OK, fallait juste préciser __stdcall dans la fonction dans la DLL et ca marche.
 
Comme quoi.

C'était donc un problème de convention d'appel ;)

Reply

Marsh Posté le 20-07-2003 à 21:06:40    

*Syl* a écrit :

C'était donc un problème de convention d'appel ;)


Vi :)
 
merci :jap: :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed