Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Pointer Problem unter XP Prof (https://www.delphipraxis.net/12325-pointer-problem-unter-xp-prof.html)

tgt 25. Nov 2003 11:50


Pointer Problem unter XP Prof
 
Hallo,

Ich habe ein Interprocess Communication über File Mapping aufgebaut. Ein Service kommuniziert mit einer Desktop Anwendung über dieses IPC. Funktioniert auch tadel los unter 2000/XP Home/.NET .. selbst unter LongHorn (beta) funzt es. NUR unter Windows XP Professional geht es nicht... und das habe ich bereits mit ca 6 unterschiedlichen Installationen getestet. Auf einem Rechner hab ich sogar alle SP's und Patches draufgespielt, aber keine Veränderung.

Es scheint wohl ein Problem mit dem Pointer zu geben:

Delphi-Quellcode:
 
procedure OpenMMF;
begin
 FConnected := False;
 hMap := OpenFileMapping(FILE_MAP_ALL_ACCESS, False, MMF_NAME);
 if hMap <> 0 then
  begin
   MapView := MapViewOfFile(hMap, FILE_MAP_WRITE, 0, 0, 0);
   FConnected := Assigned(MapView);
  end
 else error('Keine Verbindung zur MMF Quelle.');
end;

procedure ReadMMF(var Buffer: String);
begin
  // An dieser stelle stürzt alles ab !!!
  if Assigned(MapView) then Buffer := String(MapView);
end;
Hat jemand schon ein ähnliches problem gehabt und vielleicht eine Lösung, oder eine Ahnung warum das nur unter XP Prof passiert und nie unter XP Home ?! - Kann ja nicht sein, dass das eine OS Pointer anders behandelt als das andere....

gruss,
Andi

Langohr 25. Nov 2003 11:58

Re: Pointer Problem unter XP Prof
 
Hi !

Ich vermutte mal, dass du deinen Buffer, welchen du übergibst überschreibst
Hast du vorher schon Speicher reserviert ?

tgt 25. Nov 2003 12:01

Re: Pointer Problem unter XP Prof
 
Ja der speicher ist reserviert. Er hat eine feste Größe von 1024 Zeichen. Die Prozesse tauschen auch nicht mehr als 1024 zeichen untereinander aus. Das funktioniert alles tadelos. Bis ich auf den Pointer zugreifen will, der das gemeinsame Handel represäntiert.

scp 25. Nov 2003 12:33

Re: Pointer Problem unter XP Prof
 
Ein String arbeitet ja mit variabler Länge, die Länge wird bei Pointer(Integer(AStr) - 4) gespeichert.
Probier mal folgendes bei schreiben und lesen aus:

Delphi-Quellcode:
  if Assigned(MapView) then Buffer := String(Pointer(Integer(MapView) + 4));
PS: Wenn du dann 1024 Byte für den String benötigst, musst du 1028 Byte reservieren (4 Bytes für die Grösse).

tgt 25. Nov 2003 13:17

Re: Pointer Problem unter XP Prof
 
Ja geht mit der Buffer Erweiterung.. ich hab jetzt mal eine

Delphi-Quellcode:
try
.
.
except
.
.
end;
schleife noch reingebracht... jedesmal bekomm ich einen zugriffsfehler :(

was mich eben hauptsächlich wundert, ist die tatsache, das es unter 2000, XP Home, .NET (Windows 2003 Server) und LongHorn (beta) tadellos funktioniert.

Nur nicht unter Windows XP Professional.... ist XP Prof so verschieden
zu den anderen OS's ?

scp 25. Nov 2003 13:38

Re: Pointer Problem unter XP Prof
 
Hast du auch die Pointer-Zuweisung so geändert, wie ich es oben angegeben habe?

Ich verstehe ansonsten auch nicht warum das auf den anderen XPs klappt, weil wenn du es wie vorher machst, müsste eigentlich immer eine Zugriffsverletzung rauskommen, weil er ja dann auf Speicher ausserhalb des Maps zugreift.

tgt 25. Nov 2003 14:57

Re: Pointer Problem unter XP Prof
 
yo hab ich gemacht...

... aber keine veränderung... hab jetzt noch einen weitern XP prof rechner aufgesetzt... kein unterschied .. daneben hab ich ein WinXP Home rechner, und 2000 worauf ich entwickle... funzt alles perfekt.... :\


Alle Zeitangaben in WEZ +1. Es ist jetzt 23: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