Ich habe ein Programm "A" und ein Programm "B". Beide Programme sollen über einen gemeinsamen Speicher
Daten austauschen. Als gemeinsamer Speicher kommt aus Geschwindigkeits- und Verfügbarkeitsgründen nur
RAM in Frage.
In PBOSL gibt es die Lib "PBOSL_AllocateMemoryGlobal()". Leider wird - wie bei Amateuren so üblich- an
Anwendungsinformationen oder Examples mächtig gespart. Irgendwie muss der Lib-Programmierer davon
ausgegangen sein, dass seine Gedanken jeder lesen kann.
Wie muss ich die Funktion anwenden? Hat das schonmal jemand benutzt?
PBOSL_AllocateMemoryGlobal()
PBOSL_AllocateMemoryGlobal()
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: PBOSL_AllocateMemoryGlobal()
http://www.purebasic.fr/german/viewtopi ... 16#p139216
http://www.purebasic.fr/german/viewtopi ... 135#p44135
Ich weiß aber nicht, ob du diese zwei Beispielcodes bereits kennst. Für mich wären die zwei Beispiele bereits ausreichend.
http://www.purebasic.fr/german/viewtopi ... 135#p44135
Ich weiß aber nicht, ob du diese zwei Beispielcodes bereits kennst. Für mich wären die zwei Beispiele bereits ausreichend.
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Re: PBOSL_AllocateMemoryGlobal()
Es sind doch 2 Beispiele im examples Ordner enthalten, IMHO mehr als genug um diese einfach Lib zu verstehen.
Hier mal meine Umsetzung (ohne UserLib):
CreateSharedMemory(Name.s, Size):
Name: ein beliebieger String
Size: Grösse des Speichers
Andere Programme benötigen den Namen um den Speicher zu öffnen:
OpenSharedMemory(Name.s)
Mit CloseSharedMemory(MemoryAddress) wird das ganze geschlossen (erst nachdem die letzte Instance
es geschlossen hat, also nach einem Create und 3 Open, erst wenn diese alle geschlossen wurden.
Das Ergebnis der ersten beiden Funktionen ist die Speicheradresse, in die geschreiben werden kann.
Es empfiehlt sich, den Speicher zu strukturieren, wobei zu beachten ist, das dynamische Elemente nicht
genutzt werden können, also keine Strings, nur FixStrings, keine Arrays, List oder Maps.
Gruß
Thomas
Hier mal meine Umsetzung (ohne UserLib):
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
Name: ein beliebieger String
Size: Grösse des Speichers
Andere Programme benötigen den Namen um den Speicher zu öffnen:
OpenSharedMemory(Name.s)
Mit CloseSharedMemory(MemoryAddress) wird das ganze geschlossen (erst nachdem die letzte Instance
es geschlossen hat, also nach einem Create und 3 Open, erst wenn diese alle geschlossen wurden.
Das Ergebnis der ersten beiden Funktionen ist die Speicheradresse, in die geschreiben werden kann.
Es empfiehlt sich, den Speicher zu strukturieren, wobei zu beachten ist, das dynamische Elemente nicht
genutzt werden können, also keine Strings, nur FixStrings, keine Arrays, List oder Maps.
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Re: PBOSL_AllocateMemoryGlobal()
Examples? Wo? In der "pbosl_win.zip" garantiert nicht.ts-soft hat geschrieben:Es sind doch 2 Beispiele im examples Ordner enthalten...
Und ausserdem: Wäre es nicht logischer (nomen est omen) Hilfe in der "Hilfe" anzubieten?
Danke RSBasic für die Links. Hat sich aber mit ts-softs Code erledigt.
Danke ts-soft für dein Code ohne User-Lib. Diese offene, einsehbare und jederzeit anpassbare Form ist mir
wesentlich lieber, als eine unwartbare, geschlossene Lib von irgendwo.
Edit by NicTheQuick:
Reaktionen auf diesen Beitrag befinden sich hier.
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
- unkommentierter Quellcode = unqualifizierter Müll
Re: PBOSL_AllocateMemoryGlobal()
hmmmm auf der offiziellen PBOSL Seite http://www.purearea.net/pb/german/index.htm sind doch Examples....
Ganz rechts oben... in der gleichen Reihe wie die Libs selbst....
Ganz rechts oben... in der gleichen Reihe wie die Libs selbst....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom