Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » SharedMemory mit Strukturen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
28.08.2006, 11:12 Uhr
~spomue
Gast


Hallo Leute,

vielleicht könnt ihr mir bei einem Problem weterhelfen.Ich arbeite gerade daran eine Struktur mittels Shared Memory von einem Prozess zum nächsten zu senden. Für alle die nicht wissen was Shared Memory ist.
Ein Beispiel aus der MSDN:

http://windowssdk.msdn.microsoft.com/en-us/library/ms685026.aspx

Das hin senden mache ich folgendermasen:


C++:
#include "stdafx.h"
#include "stdio.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <strstream>
#include <string>
#include <iostream>
using namespace std;

#define BUF_SIZE 256

struct struktur{
        int value;
        char text;
};
struktur test;
struktur *ptest;

char szName[]=TEXT("MyFileMappingObject");
char szMsg[100] = TEXT("");
void *pBuf;
HANDLE hMapFile;


int initSharedMemory()
{
        hMapFile = CreateFileMapping(
                INVALID_HANDLE_VALUE,    // use paging file
                NULL,                    // default security
                PAGE_READWRITE,          // read/write access
                0,                       // max. object size
                BUF_SIZE,                // buffer size  
                szName);                 // name of mapping object
        if (hMapFile == NULL || hMapFile == INVALID_HANDLE_VALUE)
        {
                printf("Could not create file mapping object (%d).\n", GetLastError());
                return 1;
        }
        pBuf = MapViewOfFile(
                        hMapFile,            // handle to map object
                        FILE_MAP_ALL_ACCESS, // read/write permission
                        0,                  
                        0,                  
                        BUF_SIZE);
        if (pBuf == NULL)
        {
                printf("Could not map view of file (%d).\n",GetLastError());
                return 2;
        }        
   return 0;
}

int main() {
        cout << "Zum Beenden eine Null senden! " << endl;
        initSharedMemory();
        while (1) {                
                cout << "Zahl:";
                cin >> test.value;
                cout << "Text:";
                cin >> test.text;
                
                if (test.value == 0){
                        break;
                }                        
                        ptest = &test;
                        CopyMemory(pBuf, ptest, sizeof(ptest));
        }
        cout << "Press any key to shutdown the memory!";
        _getch();
        
        CloseHandle(hMapFile);

        return 0;
}



Funktioniert auch, denke ich. Nur das Abrufen ist nicht so toll.
Ich mach das mit MapViewOfFile.


C++:
// SharedMemory_Prozess2.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
//

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <iostream>
using namespace std;

#define BUF_SIZE 256
struct struktur{
        int value;
        char text;
};
struktur test;
struktur *ptest;
TCHAR szName[]=TEXT("MyFileMappingObject");
HANDLE hMapFile;
void *pBuf;

int initProzess2()
{
        hMapFile = OpenFileMapping(
                        FILE_MAP_ALL_ACCESS,   // read/write access
                        FALSE,                 // do not inherit the name                                        szName);               // name of mapping object
        if (hMapFile == NULL)
        {
        printf("Could not open file mapping object (%d).\n",GetLastError());
        return 1;
        }
        
        pBuf =  MapViewOfFile(
                        hMapFile, // handle to map object
                        FILE_MAP_ALL_ACCESS,  // read/write permission
                        0,                    
                        0,                    
                        BUF_SIZE);
        
        if (pBuf == NULL)
        {
        printf("Could not map view of file (%d).\n",GetLastError());
        return 1;
        }
   return 0;
}

int main() {
        char eingabe;
        int error;
        int ausgabe;
        int text;
        error = initProzess2();        
        if (error == 1){
                cout << "Press any key to close the window!";
                _getch();
                return 0;
        }
        
        while(1) {
                cout << "Wert holen?(y/n) ";
                cin >> eingabe;
                if (eingabe == 'y'){
                        ptest=&pBuf;
                }
                else break;
        }
        UnmapViewOfFile(pBuf);
        CloseHandle(hMapFile);
        return 0;
}



Das Problem ist der Rückgabewert der Funktion MapViewOfFile. Der ist void, müsste doch aber die Struktur sein.
Weiß einfach nicht mehr weiter.

Helft mir:-(


Bearbeitung:

Codetags bitte selbst benutzen!!!


Dieser Post wurde am 28.08.2006 um 12:28 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: