Creation of a ID2D1DCRenderTarget

Creation of a ID2D1DCRenderTarget

本文关键字:ID2D1DCRenderTarget of Creation      更新时间:2023-10-16

我正试图从Direct2D创建GDI设备上下文,但当我调用CreateDCRenderTarget时,它返回D2DERR_NO_HARDWARE_DEVICE错误,并且我的RenderTarget为null。房产有问题吗?

ID2D1Factory* _pDirect2dFactory = NULL;
ID2D1DCRenderTarget *_pRenderTarget = NULL;
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
    D2D1_RENDER_TARGET_TYPE_DEFAULT,
    D2D1::PixelFormat(
        DXGI_FORMAT_B8G8R8A8_UNORM,
        D2D1_ALPHA_MODE_IGNORE),
    0,
    0,
    D2D1_RENDER_TARGET_USAGE_NONE,
    D2D1_FEATURE_LEVEL_DEFAULT
    );
  HRESULT hr;
  hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &_pDirect2dFactory);
  if (_pDirect2dFactory)
  {
    // *** ERROR here *** : hr=0x8899000B (D2DERR_NO_HARDWARE_DEVICE)
    hr = _pDirect2dFactory->CreateDCRenderTarget(&props, &_pRenderTarget);
  }

编辑:当从我的可执行文件中调用该代码时,该代码运行良好,但当通过我注入的DLL从另一个程序中调用时,它不起作用。

编辑2:好吧,现在行了。此代码是在附加DLL时调用的,我认为D2D1.DLL尚未正确附加到进程。

对于那些仍然在注入创建d2d的dll时遇到同样问题的人,请尝试将该函数放入新线程中。在我的例子中,我通过在DllMain中的CreateThread将d2d创建函数直接放入新线程中,它就可以工作了。

相关文章:
  • 没有找到相关文章