一个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总是给出“句柄无效”的错误。我很困惑,因为我不知道它在谈论哪个处理器。我已经确认共享变量在所有实例之间确实是相同的。有人能告诉我我在这里做错了吗?