我正在尝试创建一个能够处理所有渲染的Dll,我正在尝试初始化Direct X但是我收到以下错误消息:
DXGI错误:无法从DllMain调用CreateDXGIFactory。 [其他错误#76:] Engine.exe中的0x00007FF978181F28抛出异常:Microsoft C ++异常:内存位置为0x000000541631BE90的_com_error。
我从不直接调用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内的自己的类中的初始化函数中。
答案 0 :(得分:1)
DllMain
是一个特例,所以你必须要小心你在做什么。例如,默认情况下会调用在您的进程中创建的每个线程。在DllMain
内创建COM对象是不安全的,因为COM创建通常涉及加载其他DLL,并且最终会得到一个“加载程序锁定”。问题。有关详细信息,请参阅Dynamic-Link Library Best Practices
这里你最好的选择是有一个显式初始化方法来处理你从主应用程序exe中显式调用的Direct3D设备。