Создание объектов DirectX непосредственно из dllmain () не удается. Я попытался запустить новый поток, создать там объекты, и они получают vtable/адреса функций, которые я собираюсь зацепить. DetourtransActionCommit () не может быть вызван из другого потока, чем dllmain поток. /p>
Создание объектов DirectX непосредственно из dllmain () не удается. Я попытался запустить новый поток, создать там объекты, и они получают vtable/адреса функций, которые я собираюсь зацепить. DetourtransActionCommit () не может быть вызван из другого потока, чем dllmain поток. /p> [code]BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved) { switch (dwReason) { case DLL_PROCESS_ATTACH: { std::thread(InitializeHooks).detach(); while (!_done) { std::this_thread::sleep_for(std::chrono::milliseconds(100)); } // ... break; } }
return TRUE; } < /code> Но, делая это, он застрял, когда он пытается вызвать любую функцию DirectX. < /p> Я получаю адреса функции DirectX, как это: < /p> void InitializeHooks() { if (HMODULE d3d9Module = GetModuleHandle("d3d9.dll")) { typedef IDirect3D9* (WINAPI* Direct3DCreate9Func)(UINT SDKVersion); Direct3DCreate9Func d3d9Create = (Direct3DCreate9Func)GetProcAddress(d3d9Module, "Direct3DCreate9");
HookVirtualMethod((PVOID*)&originalD3D9Present, (PVOID)HookedD3D9Present); HookVirtualMethod((PVOID*)&originalD3D11Draw, (PVOID)HookedD3D11Draw); HookVirtualMethod((PVOID*)&originalD3D11DrawIndexed, (PVOID)HookedD3D11DrawIndexed); HookVirtualMethod((PVOID*)&originalDXGIPresent, (PVOID)HookedDXGIPresent); [/code] Как в этом случае я могу получить адреса изнутри DLL?