在Dll中使用DirectX

时间:2016-08-14 14:50:35

标签: c++ dll directx

我正在尝试创建一个能够处理所有渲染的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内的自己的类中的初始化函数中。

1 个答案:

答案 0 :(得分:1)

DllMain是一个特例,所以你必须要小心你在做什么。例如,默认情况下会调用在您的进程中创建的每个线程。在DllMain内创建COM对象是不安全的,因为COM创建通常涉及加载其他DLL,并且最终会得到一个“加载程序锁定”。问题。有关详细信息,请参阅Dynamic-Link Library Best Practices

这里你最好的选择是有一个显式初始化方法来处理你从主应用程序exe中显式调用的Direct3D设备。