Gemeinsame Speichernutzung zweier Programme über eine DLL
-
Hallo,
ich habe 2 Programme, welche beide auf die gleichen Daten zugreifen sollen.
Schnittstelle ist das Shared data_seg einer DLL.
Bisher kann ich über dieses Shared data_seg nur auf Einzelwerte von Variablen zugreifen, welche dort während der Erstellung/Linken der DLL schon angelegt sind.Nun möchte ich jedoch dynamisch von Programm1 Speicher anlegen lassen. Dieser Speicher soll von Programm2 befüllt und anschliessend von Programm1 wieder ausgelesen werden.
Problem ist ja - das nur das Programm1 (welches den Speicher anlegt) auch darauf zugreifen kann. Wie kann ich Progarmm2 den Zugriff ermöglichen??
Bei der Lösung des Problems soll kein SharedMemory (fileorientiert) verwendet werden.
Ich habe schon Ansätze wie VirtualAlloxEx oder Pointerdeklaration im data_seg gefunden.Kennt sich jemand damit aus und kann mir konstruktiv weiterhelfen?
Danke
-
Es kommt ganz auf deine Anforderung an - Beschreibe mal genau welche Daten, in welcher Reihenfolge, von wem zu wem ausgetauscht werden
SharedMemory oder VirtualAlloxEx braucht man kaum bis gar nicht - new/delete oder malloc/free reicht da voellig aus
-
Hi,
also bisher habe ich eine "MY_DATA_STRUCT" in welcher derzeit nur Einzelwerte stehen:
typedef struct DECLSPEC
{
int StartMessung;
int MessungFertig;
float *MyArray;} MY_DLL_EXPORT_STRUCT;
Diese Struktur ist in einem Header definiert.In meiner DLL (C-File) habe ich das data_seg wie folgt aufgebaut:
#pragma data_seg(".MY_DLL_shared")static float *MessArray = NULL;
__declspec(dllexport) MY_DLL_EXPORT_STRUCT MY_DATA_STRUCT = {0} ;#pragma data_seg()
#pragma comment( linker, "/section:.MY_DLL_shared,RWS")Nun habe ich zwei Funktionen innerhalb der DLL definiert:
1. InitMessung()
Diese Funktion wird vom Programm1 gerufen und legt Speicher an.
MessArray = malloc( 1000 * sizeof(float));
MyArray = MessArray; // hier liegt wohl das Problem??2. Messung()
Diese Funktion wird von Programm2 gerufen sobald Programm1 das Flag
StartMessung innerhalb der data_seg Struktur auf "1" setzt.
Die Funktion soll nun nach dem Start der Messung 1000 float Werte in das
MessArray schreiben - also MY_DATA_STRUCT.MyArray[index] = FloatMesswert(z.b.
1.1)...
Ist dies erfolg, wird das Flag MessungFertig vom Programm2 gesetzt, Programm1
sieht das und soll nun die Messwerte auslesen.- Die Flags StartMessung und MessungFertig lassen sich prima handeln - sind ja
auch bekannt.
- Problem ist nun Programm2 schreibt wohl in irgendeinen Speicherbereich und
stürzt beim Index 50168 ab
- Programm1 kann zwar auf den Speicher zugreifen - es stehen aber keine
Messwerte drin, sondern "0" - also der InitwertHoffe das hilft- wenn noch Infos fehlen - bitte melden.
Danke schonmal
-
sorry - es sind nicht malloc( 1000 * sizeof(float)) sondern 100000...sonst wäre es ja einfach
-
Das Ganze hat nichts mit C zu tun, sondern gehört ins Subforum WinAPI.
Außerdem gibt es C Codetags, davon scheinst du auch nichts wissen zu wollen.
-
Wenn es partout über ein
data_seg
laufen soll, mußt Du wohl in deinem Segment ein statisches Array der gewünschten Größe anlegen.float sharedArr[100000];
Gibt 'ne schön große DLL.
-
@Wutz - mach lieber hilfreiche Vorschläge! Wenn du das kannst...
-
Ich habe hier sehr viele Beiträge gemacht, die alle sehr hilfreich waren, im Gegensatz dazu bist du noch nicht mal in der Lage, eine qualifizierte Frage zu stellen und die Forumsregeln zu beachten. Also klassischer Fall von Noob.
-
MaxGast schrieb:
@Wutz - mach lieber hilfreiche Vorschläge! Wenn du das kannst...
Wenn der Vorschlag, das Problem im richtigen Subforum zur Diskussion zu stellen, nicht hilfreich ist, dann wirds schwierig ...