Grazioe per il Link ma non ho trovato le cose che ho bisogno...
Ripeto il mio problema, ho un programma che deve essere aperto 2 volte ma usando gli stessi dati in memoria, non voglio mettere la gestione dei soket perchè il programma diventerebbe super pesante, e quindi utilizzando la share memory e la cosa + appropriata.
Quello che voglio se scrivio un testo in una text box nel programma A, voglio che si veda anche sul programma B (identico al A).
Qua sotto c'è il codice di esempio sulla Main Form (in C++ Builder 5):
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
AnsiString sIniFileName, m_sWorkingDir, sMutex;
TIniFile *IniFile;
int nSet;
m_sWorkingDir = ExtractFilePath(Application->ExeName);
sIniFileName = m_sWorkingDir + "PrtSharedMemory.ini";//TruncateAnsiString( Application->ExeName.UpperCase(), ".EXE" ) + ".INI";
IniFile = new TIniFile( sIniFileName );
nSet = IniFile->ReadInteger( "GENERAL", "Set", 0 );
delete IniFile;
sMutex.printf( "APPLICAZ%d", nSet );
HANDLE mutex = CreateMutex( NULL, TRUE, sMutex.c_str() );
if( GetLastError()!=ERROR_ALREADY_EXISTS )
{
try
{
static HANDLE shFileMap = NULL;
HANDLE hBaseAddress;
if(!nSet)
shFileMap = CreateFileMapping((HANDLE)0xffffffff, NULL, PAGE_READWRITE, 0, 4, "AppBCB");
else
shFileMap = OpenFileMapping( FILE_MAP_ALL_ACCESS, TRUE, "AppBCB" );
if( shFileMap==NULL )
{
ShowMessage("Il programma server non e Aperto.");
Application->Terminate();
}
else
{
hBaseAddress = MapViewOfFile( shFileMap, FILE_MAP_WRITE, 0, 0, 0 );
Application->Initialize();
Application->CreateForm(__classid(TPrtSharedMemoryForm), &PrtSharedMemoryForm);
Application->Run();
}
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
CloseHandle( mutex );
return 0;
}
Quando creo la variabile hBaseAddress non so come allocarla alla form in modo che quando si apre il programma, me lo carichi dove voglio io, ma non so quali parametri devo mettere ho cercato in internet ma non ci sono molti esempi in c++ builder 5.....

Rispondi quotando