我正在尝试创建一个 Dll 来处理我所有的渲染,我正在尝试初始化 Direct X,但我收到以下错误消息:
DXGI ERROR: CreateDXGIFactory cannot be called from DllMain. [ MISCELLANEOUS ERROR #76: ] Exception thrown at 0x00007FF978181F28 in Engine.exe: Microsoft C++ exception: _com_error at memory location 0x000000541631BE90.
我从来没有直接调用CreateDXGIFactory,我只在程序崩溃前调用了D3D11CreateDevice,下面是D3D11CreateDevice的代码:
HRESULT hRes;
D3D_FEATURE_LEVEL featureLevel;
m_pConsole->WriteToConsole("Creating D3D11 device !");
hRes = D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, D3D11_CREATE_DEVICE_DEBUG, NULL, 0, D3D11_SDK_VERSION, &m_pD3D11Device, &featureLevel, &m_pD3D11DeviceContext);
这个函数调用不在 Dll main 中,而是在 Dll 中它自己的类中的初始化函数中。
最佳答案
DllMain
是一个特例,因此您必须小心处理其中的操作。例如,默认情况下,它会为进程中创建的每个线程 调用。在 DllMain
中创建 COM 对象并不安全,因为 COM 创建通常涉及加载其他 DLL,最终会遇到“加载程序锁定”问题。有关这方面的更多信息,请参阅 Dynamic-Link Library Best Practices
你最好的选择是有一个显式初始化方法来处理创建你从你的主应用程序 exe 显式调用的 Direct3D 设备。
关于c++ - 在 Dll 中使用 DirectX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38943370/