J'ai déjà eu affaire à ce pb sous Linux. Problème que j'ai résolu avec les files de messages. Je sais que ces files existent également sous Windows.
Les fonctions à utiliser sont
CreateMailslot, CreateFile, CloseHandle ...
Je te joins un code qui n'est pas de moi (c'est le code que j'ai porté sous Linux). J'espère que ça répondra à tes attentes.
__declspec( dllexport ) unsigned long CreateMsgBox(char *Nom)
{
HANDLE hMailslot;
char *NomMailslot = (char *)calloc(50+strlen(Nom),sizeof(char));
strcat(NomMailslot,"\\\\.\\mailslot\");
strcat(NomMailslot,Nom);
if((hMailslot=CreateMailslot(NomMailslot,0,MAILSLOT_WAIT_FOREVER,NULL))==INVALID_HANDLE_VALUE)
{
free(NomMailslot);
return(-1);
}
else
{
free(NomMailslot);
return((unsigned long)hMailslot);
}
return(0);
}
__declspec( dllexport ) unsigned long OpenMsgBox(char *Nom)
{
HANDLE hMailslot;
char CmpName[100];
unsigned long Nb=100;
GetComputerName(CmpName,&Nb);
char *NomMailslot = (char *)calloc(Nb+16+strlen(Nom),sizeof(char));
strcat(NomMailslot,"\\\");
strcat(NomMailslot,CmpName);
strcat(NomMailslot,"\\mailslot\");
strcat(NomMailslot,Nom);
if((hMailslot=CreateFile(NomMailslot,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL))==INVALID_HANDLE_VALUE)
{
free(NomMailslot);
return(-1);
}
else
{
free(NomMailslot);
return((unsigned long)hMailslot);
}
}
__declspec( dllexport ) unsigned long CloseMsgBox(unsigned long NumMailslot)
{
if(CloseHandle((HANDLE)NumMailslot)==0)
return(-1);
else
return(0);
}
__declspec( dllexport ) unsigned long GetNbrMsgInBox(unsigned long NumMailslot,unsigned long *NbMess)
{
if( GetMailslotInfo((HANDLE)NumMailslot,NULL,NULL,NbMess,NULL)==0)
return(-1);
else
return(0);
}
__declspec( dllexport ) unsigned long GetLengthNextMsg(unsigned long NumMailslot,unsigned long *LengthMsg)
{
if( GetMailslotInfo((HANDLE)NumMailslot,NULL,LengthMsg,NULL,NULL)==0)
return(-1);
else
return(0);
}
__declspec( dllexport ) unsigned long WriteMsg(unsigned long NumMailslot,void *Message,unsigned long LengthMsg)
{
unsigned long nb=0;
if(WriteFile((HANDLE)NumMailslot,Message,LengthMsg,&nb,NULL)!=0)
return(nb);
else
return(-1);
}
__declspec( dllexport ) unsigned long ReadMsg(unsigned long NumMailslot,void *Message,unsigned long LengthMsg)
{
unsigned long nb=0;
if(ReadFile((HANDLE)NumMailslot,Message,LengthMsg,&nb,NULL)!=0)
return(nb);
else
return(-1);
}