Segment m. QSharedMemory erstellen; m. pure Win API lesen?

Alles rund um die Programmierung mit Qt
Antworten
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Segment m. QSharedMemory erstellen; m. pure Win API lesen?

Beitrag von -=Freaky=- »

hi,

ich will ein paar infos aus einem qt-programm via shared memory zur verfuegung stellen.

gelesen werden sollen diese daten allerdings aus einem non-qt-programm, welches ausschliesslich mit der win-api arbeitet.

ich habe mir die doku zu QSharedMemory angesehen und mit 2 separaten qt-programmen funktioniert die kommunikation absolut einwandfrei.

nun habe ich versucht, das lesende programm nach DIESEM MUSTER (2. code) nur mit der win-api lesen zu lassen, allerdings kommt bei OpenFileMapping(...) immer NULL raus.

ist das ganze ueberhaupt moeglich, wie ich das will, oder muss ich in dem qt-code hierzu auch auf die win-api zurueckgreifen, um ein shared memory segment anzulegen und reinzuschreiben?

achso und wenn ich schonmal dabei bin:
ich habe 0 erfahrung in sachen ipc, daher:
wie macht man das normalerweise, wenn man mehrere separate daten uebergeben will?
einmal named shared memory und alles rein, oder mehrere benannte segmente allokieren?

danke im voraus!

mfg,
julian
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum »

Ich waer mir ned sicher, ob QT den namen den du beim konstruktur uebergibst, 1:1 an die winapi runner reicht . Schau mal im QT code nach, wo er das createfilemapping aufruft (irgendwo muss er es machen) und welcher name da ankommt ....

Prinzipiell sollt es schon gehen .... wobei es schon besser ist die selben bibs zu verwenden. man weiss nie was sich von version zu version immer aendert. In deinem fall, shared memory selber implementieren (Createfilemapping und openfilemapping kapseln), fuer die client seite musst es ja eh, dann iss die server seite nimmer so schwer ....

Da shared momory immer nur auf einem PC / selbes BS funktioniert, und eine deine komponenten (server oder client) soweiso die qt benutzt (oder) ... warum die andere komponente ned auch auf qt umstellen ....
oder einfacher, den shared memory zugriff in ne dll kapseln, und in der dll dann qt verwenden ...
waer halt auch ne option ...

Ich wuerde aber bei der winapi bleiben .....

und das aufsplitten in mehrere shared memory bereiche macht nur sinn, wenn mehrere clients (mit unenrschiedlichen bloecken) bedienen willst, oder die daten nimmer in einen bereich passen ....

Ciao ....
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Beitrag von -=Freaky=- »

vielen dank RHBaum!
ich hab nun wie du sagtest in beiden programmen die win-api direkt benutzt und es funktioniert tadellos.

ich hatte nicht viel zeit, den QSharedMemory sourcecode habe ich mir kurz angesehen, aber konnte ueberhaupt nicht erlesen, wie er das segment nun benennt ...

im 2. programm qt zu nutzen, das wollte ich unbedingt vermeiden, weil das einfach overkill waere, das programm braucht eine WinMain funktion und hat nichtmal ne oberflaeche (nur auf nem externen s/w 160x43px display).
koennte man zwar ohne core sicher hinbekommen, aber das ding sollte schoen einfach schlank gehalten werden.

und am ende hat ja doch alles funktioniert. :)

mfg,
julian
Antworten