|  | 
|   | 
 | 
  |  KompilierenMarkierenSeparierenSource wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
Arbeitsspeicher von Anwendungen gemeinsam nutzen
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
 |  
  | 
|   | 
 |  | 
|   | 
 
 
  |