![]() |
Delphi-Version: 5
Herausfinden wer wann auf einen shared memory Bereicht zugreift
Moin.
Meine Anwendung teilt sich mit einer anderen Anwendung einen 'shared memory' Bereich um Daten auszutauschen:
Delphi-Quellcode:
Gibt es eine Möglichkeit (beim debuggen) herauszufinden wer wann (evtl. auch auf welche Adresse) auf diesen Speicher zugreift?
procedure MyForm.InitMemorySharing;
begin if FpMyPara = nil then begin FileMapping := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, sizeof(TMyPara), pchar('MyPara')); if FileMapping = 0 then begin MessageBox(0, 'Can''t Create Memory Map', 'Error', MB_ICONERROR or MB_OK or MB_APPLMODAL); //Application.Terminate; exit; end; FpMyPara := MapViewOfFile(FileMapping, FILE_MAP_ALL_ACCESS, 0, 0, 0); if FpMyPara = nil then begin CloseHandle(FileMapping); MessageBox(0, 'Can''t View Memory Map', 'Error', MB_ICONERROR or MB_OK or MB_APPLMODAL); //Application.Terminate; exit; end; end; end; |
AW: Herausfinden wer wann auf einen shared memory Bereicht zugreift
Du solltest erst mal die vorhandene Fehlerinformation auswerten und eine Exception auslösen (keine MessageBox verwenden!).
Delphi-Quellcode:
procedure MyForm.InitMemorySharing;
begin if FpMyPara = nil then begin FileMapping := CreateFileMapping($FFFFFFFF, nil, PAGE_READWRITE, 0, sizeof(TMyPara), pchar('MyPara')); if FileMapping = 0 then begin raise EWin32Error.Create('Can''t Create Memory Map'#13#10+SysErrorMessage(GetLastError)); end; |
AW: Herausfinden wer wann auf einen shared memory Bereicht zugreift
Soweit ich das bisher gesehn hab, gibt keine derartigen Informationen,
aber die eine Anwendung kann der anderen eine Message schicken, also "ich schreibe jetzt dort rum" oder man nutzt globale Events oder oder oder... |
AW: Herausfinden wer wann auf einen shared memory Bereicht zugreift
Hmmmm.... Das Problem ist, dass sich die andere Anwendung nicht so einfach ändern lässt :?
Deswegen kann ich solche Mechanismen nicht so einfach verwenden... Kann man denn eine Speicherstelle irgendwie auf Veränderung überwachen und dann eine Art Event aufrufen oder eine ISR oder nen Breakpoint oder sonstiges ??? |
AW: Herausfinden wer wann auf einen shared memory Bereicht zugreift
Du kannst, z.B. in einem Timer immer mal nach dem Inhalt schauen und diesen mit einer älternen Version vergleichen. :stupid:
PS: soeine Funktion kann man z.B. auch in die "Liste der überachten Ausdrücke" aufnehmen und eventuell sogar in der Bedingung eines Haltepunktes verwenden. |
AW: Herausfinden wer wann auf einen shared memory Bereicht zugreift
Man könnte das über Semaphoren machen, aber das ist Luxus.
Es werden WINDOWS-Funktionen genutzt, dann ist das auch Sache von WINDOWS, WRITE- und READ-Funktionen von einander zu trennen. Eigene Zugriffskontrolle bauen mit Timestamp: Zitat: "When modifying a file through a mapped view, the last modification timestamp may not be updated automatically. If required, the caller should use SetFileTime to set the timestamp." |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz