fdfdfdddd
09-11-2006, 10:19
Salve a tutti,
avrei bisogno di alcuni chiarimenti in merito alle funzioni della gestione della memoria su Windows. In particolare il mio scopo è quello di scrivere dei dati di una variabile in un dato processo in una zona di memoria globale e leggere quest'aria in un'altro processo prendendone il contenuto.
Consultando la MSDN, vedo queste funzioni che dovrebbero darmi una mano ...
The GlobalAlloc function allocates the specified number of bytes from the heap. Windows memory management does not provide a separate local heap and global heap.
[I]
The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object's memory block.
al che ho scritto due programmetti di test: questo per "scrivere" l'handle sul disco ...
HGLOBAL myGlobalMemoryHandle;
int myInteger = 270578;
int newInteger = 0;
FILE *fp;
myGlobalMemoryHandle = GlobalAlloc(GMEM_MOVEABLE, sizeof(int));
newInteger = (int)GlobalLock(myGlobalMemoryHandle);
memcpy(&newInteger, &myInteger, sizeof(int));
GlobalUnlock(myGlobalMemoryHandle);
fp = fopen("C:\\test.bin", "wb");
fwrite(&myGlobalMemoryHandle, sizeof(HGLOBAL), 1, fp);
fclose(fp);
e questo per "leggere":
HGLOBAL myMemoryHandle;
FILE *fp;
int myInteger = 0;
if ((fp = fopen("C:\\test.bin", "rb")) != NULL) {
fread(&myMemoryHandle, sizeof(HGLOBAL), 1, fp);
}
myInteger = (int) GlobalLock(myMemoryHandle);
Ma il mio "myInteger" in questo caso rimane a 0.
Sbaglio qualcosa nei programmi oppure uso delle API errate? E se uso api errate ce ne sono che soddisfano la mia esigenza?
avrei bisogno di alcuni chiarimenti in merito alle funzioni della gestione della memoria su Windows. In particolare il mio scopo è quello di scrivere dei dati di una variabile in un dato processo in una zona di memoria globale e leggere quest'aria in un'altro processo prendendone il contenuto.
Consultando la MSDN, vedo queste funzioni che dovrebbero darmi una mano ...
The GlobalAlloc function allocates the specified number of bytes from the heap. Windows memory management does not provide a separate local heap and global heap.
[I]
The GlobalLock function locks a global memory object and returns a pointer to the first byte of the object's memory block.
al che ho scritto due programmetti di test: questo per "scrivere" l'handle sul disco ...
HGLOBAL myGlobalMemoryHandle;
int myInteger = 270578;
int newInteger = 0;
FILE *fp;
myGlobalMemoryHandle = GlobalAlloc(GMEM_MOVEABLE, sizeof(int));
newInteger = (int)GlobalLock(myGlobalMemoryHandle);
memcpy(&newInteger, &myInteger, sizeof(int));
GlobalUnlock(myGlobalMemoryHandle);
fp = fopen("C:\\test.bin", "wb");
fwrite(&myGlobalMemoryHandle, sizeof(HGLOBAL), 1, fp);
fclose(fp);
e questo per "leggere":
HGLOBAL myMemoryHandle;
FILE *fp;
int myInteger = 0;
if ((fp = fopen("C:\\test.bin", "rb")) != NULL) {
fread(&myMemoryHandle, sizeof(HGLOBAL), 1, fp);
}
myInteger = (int) GlobalLock(myMemoryHandle);
Ma il mio "myInteger" in questo caso rimane a 0.
Sbaglio qualcosa nei programmi oppure uso delle API errate? E se uso api errate ce ne sono che soddisfano la mia esigenza?