Seite 1 von 1

Wie funktioniert Createfilemapping ?

Verfasst: 01.03.2013 10:36
von funkheld
Hallo, guten Tag.
Wie funktioniert eigentlich dieses :
hmap = CreateFileMapping_(#INVALID_HANDLE_VALUE, 0, #PAGE_READWRITE|#SEC_COMMIT|#SEC_NOCACHE, 0, SizeOfMem, "MeinSpeicher")
hMapView = MapViewOfFile_(hmap, #FILE_MAP_ALL_ACCESS, 0, 0, 0)
Mit dieser Routine schreibe ich dauernd in den Filemappingspeicher
rdata=ReceiveNetworkData(ClientID, *rbuffer, 255)
PokeL(hMapView + 0, rdata)
CopyMemory(*rbuffer,hMapView + 4,rdata)
Mit einem anderen Programm lese ich die Daten dauernd aus dem Speicher.

Man kann ja nicht gleichzeitig in den Speicher schreiben und lesen.
Welche Routine steuert eigentlich dieses ?

Danke.

Gruss
peter

Re: Wie funktioniert Createfilemapping ?

Verfasst: 01.03.2013 10:40
von ts-soft

Code: Alles auswählen

Define HandleMap

Procedure CreateSharedMemory(Name.s, Size)
  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

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

Procedure CloseSharedMemory(MemoryAddress)
  Shared HandleMap
  UnmapViewOfFile_(MemoryAddress)
  CloseHandle_(HandleMap)
EndProcedure

Re: Wie funktioniert Createfilemapping ?

Verfasst: 01.03.2013 13:46
von funkheld
Jup, danke für die Proceduren.

Gruss
peter