Forum: Win32/Win64 API (native code)
by himitsu,
16. Mai 2009
ups ... <> nil natürlich :oops:
im Fehlerfall liefert GlobalLock ein NIL zurück.
Forum: Win32/Win64 API (native code)
by himitsu,
8. Mai 2009
nee, SendMessage wertet, bis das andere Programm fertig ist
und das hab ich hier mal ausgenutzt, damit die Speicher reservierung und Freigabe in einer Hand (Programm) bleibt.
Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Size);
If Data <> 0 Then Begin
Try
DataPtr := GlobalLock(Data);
If DataPtr <> nil Then Begin
Try
CopyMemory(DataPtr, PChar(aText), Size);
Forum: Win32/Win64 API (native code)
by himitsu,
8. Mai 2009
Einfach so mit einem Pointer geht das nicht ... wie auch, da beide Programme ihren eigenen virtuellen Arbeitsspeicher haben.
DataPtr := GlobalLock(wParam);
try
s := PChar(DataPtr); // oder sonstwas
finally
GlobalUnlock(wParam);
end;
Forum: Win32/Win64 API (native code)
by himitsu,
8. Mai 2009
ich würd es am Einfachsten so machen ... auf jedenfall mußt du data verschicken, der andere Prozess holt sich dann über diesen globalen Wert in data selber per GlobalLock die Daten in seinen Arbeitsspeicher und kann dann daraus lesen.
Data := GlobalAlloc(GMEM_MOVEABLE or GMEM_DDESHARE, Size);
try
DataPtr := GlobalLock(Data);
try
CopyMemory(DataPtr, PChar(aText), Size);
finally
...
Forum: Win32/Win64 API (native code)
by himitsu,
7. Mai 2009
nja, direkt Speicher reservieren mußt du nicht ... du mußt nur einen Zeiger auf die geünschten Daten verschicken und beim Empfänger ab dieser Adresse die Daten auslesen (wenn es ein anderer Prozeß ist, dann z.B. per ReadProcessMemory)