DLL имеет следующие общие переменные (я использую MinGW):
int iCount __attribute__((section(".str"), shared)) = 0;
HANDLE hMainFile __attribute__((section(".shr"), shared)) = NULL;
HANDLE hProcess __attribute__((section(".shr"), shared)) = NULL;
и глобальную переменную:
HANDLE hFile = NULL;
Вот как я работаю с моей 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;
Как видите, первый экземпляр DLL создаст файл и установит дескриптор общего файла.Остальные экземпляры DLL должны дублировать оригинальный дескриптор файла на тот, который совместим с его экземпляром.Тем не менее, DuplicateHandle всегда выдает ошибку «Дескриптор недействителен».Я в замешательстве, потому что не знаю, о какой ручке идет речь.Я подтвердил, что общие переменные действительно одинаковы для всех экземпляров.Может кто-нибудь сказать мне, что я здесь делаю не так?