P
Der Begriff global wird von dir falsch interpretiert.
Die globalen Variabeln sind nur global in dem Programm nicht auf dem Rechner.
Eine Dll wir nur einmal geladen heißt der ausführbare Code ist genau einmal im Speicher des Rechners.
Eine Dll besteht aber aus zwei Hauptsektionen dem Codebereich und dem Datenbereich.
Der Codebereich wird genau einmal geladen. Der Datenbereich wird für jede Applikation neu erzeugt (GOTT SEI DANK).
Um das zu tun was du möchtest gibt es zwei Möglichkeiten.
Es gibt eine Möglichkeit in einer DLL einen benannten Memory Bereich
zu erzeugen zur Rechner global ist. Das heißt alle Applikationen können,
wenn sie diesen Bereich kennen darauf lesend und schreibend zugreifen. (Damit habe ich keinerlei Erfahrung)
Man kann explizit shared Memory anlegen, und dieses dann von den n-Applikationen aus nutzen.
Hier unten ein Bruch stück von Code den ich vor längerem benutzt habe, ers soll dir Hinweise geben wonach du in den Hilfen suchen sollst
SHARED_MEM_DATA *A;
HANDLE hFile = (HANDLE)0xffffffff; // Datei ist nur im Speicher vorhanden, daher handle == 0xffffffff
LPVOID lpMapAddress; // Zeiger auf den geteilten Speicher
hMapFile = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE,"SHAREDMEM");
if(hMapFile == NULL)
{
hMapFile = CreateFileMapping(hFile, // Current file handle.
NULL, // Default security.
PAGE_READWRITE, // Read/write permission.
0, // Max. object size.
(sizeof(SHARED_MEM_DATA)), // Size of hFile.
"SHAREDMEM"); // Name of mapping object.
if (hMapFile == NULL)
{
printf("Could not create file-mapping object.");
}
}
lpMapAddress = MapViewOfFile(hMapFile, // Handle to mapping object.
FILE_MAP_ALL_ACCESS, // Read/write permission
0, // Max. object size.
0, // Size of hFile.
0); // Map entire file.
if (lpMapAddress == NULL)
{
printf("Could not map view of file.");
}
A = (SHARED_MEM_DATA *)lpMapAddress;
}