A volte può essere necessario condividere dati fra più applicazioni. Una soluzione "classica" consiste nel creare memory mapped files, o files fisici, o tabelle di database di appoggio e così via. Una possibile alternativa consiste nel creare una DLL che non condivida solamente codice (come comportamento standard), ma anche dati.
Ad esempio, considerando un banale contatore possiamo mettere nel shared segment il valore attuale del contatore. Il seguente codice (possibile solo in MC++), crea proprio quest'area di memoria di nome .counter:
#pragma data_seg(".counter")
int _counter = 0;
#pragma data_seg()
#pragma comment(linker, "/SECTION:.counter,RWS") // RWS sta per Read, Write, Shared
A questo punto basterà creare una classe (thread-safe) che si occupa della gestione del contatore:
public __gc class Counter
{
public:
__property static int get_Count()
{
return _counter;
}
static void Increment()
{
System::Threading::Interlocked::Increment(&_counter);
}
static void Decrement()
{
System::Threading::Interlocked::Decrement(&_counter);
}
};
Usando questa classe da una qualsiasi applicazione, si vedrà che il valore del contatore è condiviso fra tutte le istanze.