| |
|
|
| KompilierenMarkierenSeparierenSource wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Datenaustausch zwischen Programmen
PROFAN²-NT-TEAM-Vorlage
Autor: Sven Schmidts, concept/design
Titel: SharedMemory
Beschreibung: Das Programm ermöglicht die gemeinsame Nutzung von Speicher. Anwendungen
können so leichter Daten untereinander austauschen (Strings).
Anmerkung: Benötigt RGH-PROFAN² ab Version 7.0
Copyright © 2000-2001 Sven Schmidts, schmidts@cdesign.de
Prozeduren :
- OpenMap MapName$, Size&
Öffnet ein Mapping. MapName$ bezeichnet den Namen des Mappings.
Size& bezeichnet die max. Größe in Byts, die gespeichert werden.
Defaultwert ist 4096 Bytes sein, maximal ca 2 GByte. Anwendungen, die
gemeinsam einen Speicher nutzen wollen, müssen als MapName$ dasselbe angeben.
- CloseMap
Schliesst das Mapping wieder
- ReadStrFromMap
Liest den momentanen Inhalt als String aus
- WriteStrToMap Text$
Schreibt den String Text$ in das Mapping
Def CreateFileMapping(6) !KERNEL32,CreateFileMappingA
Def UnmapViewOfFile(1) !KERNEL32,UnmapViewOfFile
Def MapViewOfFile(5) !KERNEL32,MapViewOfFile
Def CloseHandle(1) !KERNEL32,CloseHandle;
Declare HandleMap&, ViewPointer&, Buffer#
Proc OpenMap
Parameters MapName$, Size&
HandleMap& = CreateFileMapping($FFFFFFFF,0, 402653188,0,Size&,Addr(MapName$))
If HandleMap& <= 0
MessageBox(Fehler beim erstellen des Mappings !,Fehler,16)
Else
ViewPointer& = MapViewOfFile(HandleMap&, 983071, 0, 0, 0)
Case ViewPointer& = 0 : MessageBox(Fehler beim erstellen des Views !,Fehler,16)
Endif
EndProc
Proc CloseMap
UnMapViewOfFile(ViewPointer&)
CloseHandle(HandleMap&)
EndProc
Proc ReadStrFromMap
Lesen
Declare Ergebnis$, OldBuffer&
If ViewPointer& <> 0
Dim Buffer#, 512
OldBuffer& = Buffer#
Buffer# = ViewPointer&
Ergebnis$ = String$(Buffer#,0)
Buffer# = OldBuffer&
Dispose Buffer#
EndIf
Return Ergebnis$
EndProc
Proc WriteStrToMap
Schreiben
Parameters Text$
Declare OldBuffer&
If ViewPointer& <> 0
Dim Buffer#, Len(Text$)+1
OldBuffer& = Buffer#
Buffer# = ViewPointer&
String Buffer#,0 = Text$
Buffer# = OldBuffer&
Dispose Buffer#
EndIf
EndProc
Beispiel Programm
Compileren und zweimal starten, austausch vom Text mittels Lesen / Schreiben
cls
Declare E%, Ende%, Lesen%, Schreiben%, Edit%
Let Ende%= CreateButton(%Hwnd,Ende,10,10,90,20)
Let Lesen%= CreateButton(%Hwnd,Speicher lesen,110,10,120,20)
Let Schreiben%= CreateButton(%Hwnd,Speicher schreiben,240,10,140,20)
Let Edit% = CreateEdit(%Hwnd,,10,40,600,22)
OpenMap TestMap, 4096
WhileNot E%
SetFocus(Edit%)
WaitInput
If GetFocus(Ende%)
Let E% = 1
ElseIf GetFocus(Lesen%)
ReadStrFromMap
SetText Edit%,$(0)
ElseIf GetFocus(Schreiben%)
WriteStrToMap GetText$(Edit%)
EndIf
Wend
CloseMap
|
|
|
| |
|
|