gpt4 book ai didi

c++ - 在 VC++ 中从 DLLMAIN 内部调用 D3D 的 CREATEDEVICE 时,它会创建一个死锁(loaderlock?)。有没有办法克服这个问题?内部目标

转载 作者:太空宇宙 更新时间:2023-11-04 12:59:40 25 4
gpt4 key购买 nike

前段时间我发了一篇关于创建 dll 的帖子,用于注入(inject)目的,这将导致主机应用程序触发 Nvidia Optimus 笔记本电脑以“唤醒”dGpu。这是必要的,因为 nvidia 在这里创建了可悲的系统,导致许多应用程序无法识别 power dGpu 的存在,而是使用集成的英特尔 gpu。 (特别是一些视频处理应用程序,使用英特尔的比使用 Nvidia 的要多花几个小时)。那个帖子是here .

可以这么说,我搬到南极洲工作并放弃了这个项目。几年后我才把它捡起来,并决定学习(足够的)C++ 来在这里编程。我已经创建了 DLL,如果我将 DX 代码放在一个函数中,然后从主机“调用者”程序调用该函数。它可以工作!!!但是,如果我将该代码放在 DLLMAIN 中,然后简单地从我的“调用者”程序中加载该 dll(而不实际调用特定函数)...程序执行!!!但是,当它到达运行 CREATEDEVICE 的代码部分时,它崩溃了。从那以后,我了解到这是由于称为死锁或 loaderlock 的问题引起的。我不确定是哪个。我理解这个概念,但对 C++ 的理解还差得远,无法开发解决方法。

所以基本上.. 我可以使用一些解决方法在 DLLMAIN 中运行我的程序吗?也许以某种方式产生一个独立的线程(这样 DLLMAIN 就可以完成执行到它的返回?)感谢您提供任何信息。我将在此处包括 vcproject 源代码……但它是我在网上找到的东西的科学怪人……所以不要寻找优雅——我对 C++ 编程几乎一无所知! http://s000.tinyupload.com/index.php?file_id=07876333208461296171

最佳答案

加载程序锁是每个进程的锁,在您调用 LoadLibrary 之后拥有,直到 LoadLibrary 返回之前。它旨在确保进程正确说明加载的 DLL 及其顺序。

可以在 DllMain 中添加的代码很少,不会有失败的风险,因为任何可能导致 IPC 的 Windows 调用都可能会遇到加载程序锁。

如果你能从进程外创建一个线程,或者创建一个你可以直接调用的第二个函数,那么这将是一个更好的解决方案

关于c++ - 在 VC++ 中从 DLLMAIN 内部调用 D3D 的 CREATEDEVICE 时,它会创建一个死锁(loaderlock?)。有没有办法克服这个问题?内部目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44782428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com