Une DLL a les variables partagées suivantes (j'utilise MinGW):fichier Duplication gère entre les processus d'erreur
int iCount __attribute__((section(".str"), shared)) = 0;
HANDLE hMainFile __attribute__((section(".shr"), shared)) = NULL;
HANDLE hProcess __attribute__((section(".shr"), shared)) = NULL;
et la variable globale:
HANDLE hFile = NULL;
Voilà comment je me occupe mon DLL_PROCESS_ATTACH:
case DLL_PROCESS_ATTACH:
if(!iCount)
{
hMainFile = CreateFile("Hello.txt", GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
hFile = hMainFile;
hProcess = GetCurrentProcess();
iCount = 1;
}
else
{
DuplicateHandle(hProcess, hMainFile, GetCurrentProcess(), &hFile, 0, FALSE, DUPLICATE_SAME_ACCESS);
}
break;
Comme vous pouvez le voir, la première instance de la DLL va créer le fichier et définir le fi partagé le handle. Le reste des instances DLL doit dupliquer le handle de fichier d'origine à celui qui est compatible pour son instance. Cependant, DuplicateHandle donne toujours une erreur de "Le handle est invalide". Je suis confus parce que je ne sais pas de quel manche il parle. J'ai confirmé que les variables partagées sont en effet les mêmes entre toutes les instances. Quelqu'un peut-il me dire ce que je fais mal ici?