Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi variable in dll wird nicht "gespeichert" (https://www.delphipraxis.net/105327-variable-dll-wird-nicht-gespeichert.html)

ghost007 19. Dez 2007 20:28


variable in dll wird nicht "gespeichert"
 
Hallo,
ich versuche über eine procedure ein handle von meiner form an die dll zu schicken und dort eine variable zu setzten, die das handle enthält.

Delphi-Quellcode:
.
.
.
var
  target_handle: THandle;
.
.
.
procedure SetHandle(target: THandle); stdcall;
begin
 target_handle:=target;
 ShowMessage('handle set  '+IntToStr(target)+' : '+IntToStr(target_handle));
end;
.
.
.
exports
 SetHandle;
.
.
.
Wenn ich diese prozedur aufrufe und ihr ein handle über gebe, wird in der message, 2mal das eingegebene handel angezeigt -> ich vermute es ist angekommen und gesetzt.

Wenn ich jedoch nun folgende prozedur in der gleichen unit aufrufe
Delphi-Quellcode:
.
.
.
procedure SendName;
begin
 ShowMessage(IntToStr(target_handle));
end;
.
.
.
Dann gibt mir die message eine 0 zurück.
Wo liegt hier der hund begraben ? warum "merkt" er sich target_handle nicht?

MfG - Ghost007

Apollonius 19. Dez 2007 20:35

Re: variable in dll wird nicht "gespeichert"
 
Wird diese DLL für einen globalen Hook verwendet?

ghost007 19. Dez 2007 21:02

Re: variable in dll wird nicht "gespeichert"
 
Ja

bitsetter 19. Dez 2007 21:40

Re: variable in dll wird nicht "gespeichert"
 
Hi,

in diesem gab es ein ähnliches Problem.

sirius 19. Dez 2007 21:47

Re: variable in dll wird nicht "gespeichert"
 
Zitat:

Zitat von ghost007
Ja

Dann ist genau das dein Problem.
Du kannst da keine globalen Variablen verwenden. Abhilfe schaffen am einfachsten Memory Mapped Files.

ghost007 19. Dez 2007 21:50

Re: variable in dll wird nicht "gespeichert"
 
ok ?! ^^ ezz bin ich noch verwirrter.
Was ist da die lösung? das, es quasi für jeden prozess die variable target_handle gibt hab ich nun verstanden, aber wie setz ich die in jeder "instanz" des hooks ?

MfG - Ghost007

[EDIT]
Memory mapped files o.O ? ^^ hab grad schonmal die forensuche bemüht. Aber da wird auch vergeblich nach einem tutorial gesucht.
[/EDIT]

ghost007 20. Dez 2007 20:57

Re: variable in dll wird nicht "gespeichert"
 
*PUSH*

sirius 20. Dez 2007 21:11

Re: variable in dll wird nicht "gespeichert"
 
Du kannst eben nicht in jeder Instanz die Variable setzen.

MMFs werden eigentlich in jedem Beispiel für globale Hooks verwendet.
Du brauchst
-CreateFileMapping
-MapViewOfFile
und
-UnMapViewofFile
-CloseHandle

dominikkv 20. Dez 2007 21:34

Re: variable in dll wird nicht "gespeichert"
 
Liste der Anhänge anzeigen (Anzahl: 1)
jo, das Problem hatte ich auch mal.

Lösung:
1) Die Unit UnitWDBIPCDemoObj (Anhang) in die uses
2) In dieser Unit die Klasse TWDB_IPCDemoObj so verändern wie du willst (Felder usw einführen)
3) In deiner DLL:
Delphi-Quellcode:
var
  oDemoObj: TWDB_IPCDemoObj;
4) Zum lesen/Schreiben der Daten:
Delphi-Quellcode:
oDemoObj := TWDB_IPCDemoObj.Create('NameDesProgs');
showmessage(IntToStr(oDemoObj.MainHandle));
oDemoObj.meineVariable := 1234;
Freigeben brauchst du nicht... kannst ja im UnInstallHook die Felder auf 0 setzen :stupid:

ghost007 20. Dez 2007 21:38

Re: variable in dll wird nicht "gespeichert"
 
hey,

dominikkv das sieht sehr vielversprechend aus :) ich werd mir das mal anschaun und meld mich dann nochmal :)

MfG - Ghost007

P.S. Dank :-D

[EDIT]
Funktioniert wunderbar :) danke danke danke
[/EDIT]


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz