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. |