将 Dll 注入另一个进程时出现 Direct2D 错误 NO_HARDWARE_DEVICE

Direct2D Error NO_HARDWARE_DEVICE When Injecting Dll Into Another Process

我有一个使用 Direct3D11 呈现内容的本机目标应用程序。我想通过注入 DLL 和挂钩一些 API 来扩展目标的功能(不重要,但它是 XInputGetState)。注入 DLL 时,它还会创建一个 window 并提供一些有用的信息。为了在 window 中呈现信息,我使用 Direct2D,但是在注入 DLL 之后,在另一个进程的地址 space 中,调用 ID2D1Factory::CreateHwndRenderTarget 失败,错误代码为 D2DERR_NO_HARDWARE_DEVICE,并且不会创建 ID2D1HwndRenderTarget 对象。 Factory对象创建成功,不为NULL

当我将项目类型从 Dynamic Link Library(.dll) 更改为 Application(.exe) 并将入口点从 DllMain 更改为 main 并且 运行 它作为一个单独的控制台时申请,ID2D1Factory::CreateHwndRenderTarget成功

我认为问题是由创建的 Direct3D11 设备已经存在引起的,但我不确定。

有相关的文档吗?我该如何解决这个问题?

在DllMain中通过CreateThread直接将D2D创建函数放入新线程