gpt4 book ai didi

directx - 从 DllMain 调用 IDirect3D9::CreateDevice() 挂起

转载 作者:行者123 更新时间:2023-12-02 17:57:04 25 4
gpt4 key购买 nike

可能是什么原因?

从 DLL_PROCESS_ATTACH 上的 DllMain() 调用 IDirect3D9::CreateDevice(),它挂起

代码很简单,就像:

BOOL APIENTRY DllMain( HMODULE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
if (ul_reason_for_call = DLL_PROCESS_ATTACH) {
IDirect3D9* d3d = Direct3DCreate9(D3D_SDK_VERSION);

D3DPRESENT_PARAMETERS pp = {};
pp.BackBufferWidth = 1;
pp.BackBufferHeight = 1;
pp.BackBufferFormat = D3DFMT_X8R8G8B8;
pp.BackBufferCount = 1;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.Windowed = TRUE;

IDirect3DDevice9* device = NULL;
HRESULT hr = d3d->CreateDevice(
D3DADAPTER_DEFAULT,
D3DDEVTYPE_HAL,
GetDesktopWindow(),
D3DCREATE_HARDWARE_VERTEXPROCESSING,
&pp,
&device);

device->Release();
d3d->Release();
}
return TRUE;
}

GetDesktopWindow() 是为了简单起见,我尝试创建自己的窗口并使用它,结果相同

最佳答案

您不能在 DllMain 中执行此类操作。具体来说,您不能从其他 DLL 调用函数。您只能在主应用程序调用导出函数时执行此操作。

引用the docs on MSDN :

Threads in DllMain hold the loader lock so no additional DLLs can be dynamically loaded or initialized.

Calling functions that require DLLs other than Kernel32.dll may result in problems that are difficult to diagnose. For example, calling User, Shell, and COM functions can cause access violation errors, because some functions load other system components.

关于directx - 从 DllMain 调用 IDirect3D9::CreateDevice() 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4220640/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com