| |
|
|
| Beschreibung:
OpenFileMapping öffnet ein mit CreateFileMapping erzeugtes benanntes Filemapping Objekt und liefert dessen Handle zurück.
Deklaration:
DEF @OpenFileMapping(3) !kernel32,OpenFileMappingA
Parameter:
1.Parameter: Ein Flag für den Zugriffsmodus auf das Handle. -$2 = Nur lesen. -$4 = Schreiben und lesen. -$8 = Lesen und schreiben, aber nicht auf die Platte. Unter NT-basierten Systemen schreiben nur im aktuellen Prozess. 2.Parameter: Ein Flag, der spezifiziert, ob das zurückgegebene Handle an andere Prozesse vererbt werden kann. => -1 = Kann vererbt werden. -0 = Kann nicht vererbt werden. 3.Parameter: Ein String oder eine Bereichsvariable mit einem String, der den Namen des zu öffnenden Dateiabbildungsprojektes enthält.
Rückgabewert:
0 bei Misserfolg, ansonsten das Handle des Dateiabbildungsprojektes.
Beispiele:
Beispiel 1
DEF @CopyMemory(3) !kernel32,RtlMoveMemory
DEF @CreateFileMapping(6) !kernel32,CreateFileMappingA
Def @CloseHandle(1) !kernel32,CloseHandle
DEF @GetLastError() !kernel32,GetLastError
DEF @WriteFile(5) !kernel32,WriteFile
Def @MapViewOfFile(5) !kernel32,MapViewOfFile
DEf @UnmapViewOfFile(1) !kernel32,UnmapViewOfFile
DEF @CopyMemory(3) !kernel32,RtlMoveMemory
DEF @CreateFile(7) !kernel32,CreateFileA
WINDOWSTYLE 31+512
Windowtitle Hier wird die Variable erzeugt
WINDOW 0,0-300,400
Declare Tick&,Name$,Ausgelesen#
Declare Speicherhandle&,Speicheraddr&,Dateihandle&
Declare Dateiname$,Text$,Written#,Dateilänge&
LET TEXT$=Von der 1.Datei geschrieben
LET DATEINAME$=C:TEST.TXT
LET DateiHandle&=@CreateFile(@ADDR(Dateiname$),$80000000+$40000000,0,0,4,$80,0)
Dim Written#,4
@WriteFile(DateiHandle&,@ADDR(TEXT$),@len(Text$),Written#,0)
Dispose Written#
Let Name$=AH-Datei
LET Speicherhandle&=@CreateFileMapping(DateiHandle&,0,4,0,0,@addr(Name$))
Drawtext 0,50,Handle des Speicherbereichs: +@STR$(Speicherhandle&)
LET Speicheraddr&=@MapViewOfFile(Speicherhandle&,2,0,0,0)
Whilenot %MENUITEM=-2
IF &GETTICKCOUNT-Tick&>10000
@CopyMemory(Speicheraddr&,@addr(Text$),@len(Text$))
LET TICK&=&GETTICKCOUNT
endif
DIM Ausgelesen#,256
Clear Ausgelesen#
@CopyMemory(Ausgelesen#,Speicheraddr&,@len(Text$))
Drawtext 0,80,Text=+@String$(Ausgelesen#,0)+
Dispose Ausgelesen#
Sleep 10
WEND
@CloseHandle(Speicherhandle&)
@CloseHandle(DateiHandle&)
Beep 1
DEF @OpenFileMapping(3) !kernel32,OpenFileMappingA
DEF @GetLastError() !kernel32,GetLastError
Def @MapViewOfFile(5) !kernel32,MapViewOfFile
DEf @UnmapViewOfFile(1) !kernel32,UnmapViewOfFile
DEF @CopyMemory(3) !kernel32,RtlMoveMemory
Def @CloseHandle(1) !kernel32,CloseHandle
Windowtitle Hier wird die Variable ausgelesen
WINDOWSTYLE 31+512
WINDOW 300,0-300,400
Declare Speicherhandle&,Ausgelesen#,Name$
Declare Speicheraddr&,Text$
Declare Variable&
Let Text$=Von der 2.Datei geschrieben
Let Name$=AH-Datei
While @AND(Speicherhandle&=0,%MENUITEM<>-2)
sleep 100
LET Speicherhandle&=@OpenFileMapping(2,0,@ADDR(Name$))
Wend
LET Speicherhandle&=@OpenFileMapping(2,0,@ADDR(Name$))
LET Speicheraddr&=@MapViewOfFile(Speicherhandle&,2,0,0,0)
Drawtext 0,50,Handle des Speicherbereichs:+@STR$(Speicherhandle&)
DIM Ausgelesen#,256
Clear Ausgelesen#
WHILEnot %MENUITEM=-2
Drawtext 0,0,F1 drücken zum Auslesen
Drawtext 0,21,F2 drücken zum Schreiben...
Waitinput
IF %SCANKEY=112
@CopyMemory(Ausgelesen#,Speicheraddr&,@len(Text$))
Drawtext 0,80,Variale=+@String$(Ausgelesen#,0)+
Beep 1
ElseIF %SCANKEY=113
Beep 1
@CopyMemory(Speicheraddr&,@addr(Text$),@len(Text$))
@CopyMemory(Ausgelesen#,Speicheraddr&,@len(Text$))
Drawtext 0,80,Variale=+@String$(Ausgelesen#,0)+
Endif
WEND
Dispose Ausgelesen#
@UnmapViewOfFile(Speicheraddr&)
@CloseHandle(Speicherhandle&)
Beep 1
|
|
|
| |
|
|