;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 = OpenSharedMemory("MyMemory") If *mem MessageRequester("MyMemory", *mem\text) *mem\quit = #True FreeSharedMemory(*mem) EndIf