将 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创建函数放入新线程
我有一个使用 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创建函数放入新线程