;Autor: ts-soft ;http://www.purebasic.fr/german/viewtopic.php?p=198712#p198712 EnableExplicit Define HandleMap.l ; erstellt oder öffnet einen gemeinsamen benannten Speicher ; sollte der Speicher unter dem Namen bereits erstellt sein, ; so wird er geöffnet und Size wird ignoriert. ; dies entspricht dann OpenSharedMemory Procedure AllocateSharedMemory(Name.s, Size.l) Shared HandleMap HandleMap = CreateFileMapping_(#INVALID_HANDLE_VALUE, 0, #PAGE_READWRITE|#SEC_COMMIT|#SEC_NOCACHE, 0, Size, @Name) If HandleMap ProcedureReturn MapViewOfFile_(HandleMap, #FILE_MAP_ALL_ACCESS, 0, 0, 0) EndIf EndProcedure ; öffnet einen bereits erstellten benannten Speicher Procedure OpenSharedMemory(Name.s) Shared HandleMap HandleMap = OpenFileMapping_(#FILE_MAP_ALL_ACCESS, 0, @Name) If HandleMap ProcedureReturn MapViewOfFile_(HandleMap, #FILE_MAP_ALL_ACCESS, 0, 0, 0) EndIf EndProcedure ; gibt den Speicher für den aktuellen Process frei. ; erst wenn der letze Process den Speicher freigegeben ; hat, wird er endgültig freigegeben! Procedure FreeSharedMemory(MemoryAddress.l) Shared HandleMap UnmapViewOfFile_(MemoryAddress) CloseHandle_(HandleMap) EndProcedure ;-------------------------------------------------- Structure myMem text.s{23} quit.l EndStructure ; test Define *mem.myMem = AllocateSharedMemory("MyMemory", SizeOf(myMem)) If *mem *mem\text = "Feel the ..Pure.. Power" While *mem\quit = #False Delay(100) Wend FreeSharedMemory(*mem) MessageRequester("MyMemory", "Client hat quit gesetzt") EndIf