一個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總是給出「句柄無效」的錯誤。我很困惑,因爲我不知道它在談論哪個處理器。我已經確認共享變量在所有實例之間確實是相同的。有人能告訴我我在這裏做錯了嗎?