- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
前段时间我发了一篇关于创建 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/
我试图更详细地了解操作系统加载器锁是如何与 Windows 中的 DLL 加载和卸载相关的。 我知道当创建/销毁新线程和/或加载/卸载新 DLL 时,每个加载的 DLL 都会收到通知。 那么这是否意味
我最近将 .NET NLog 日志记录组件集成到我们的一个应用程序中,该应用程序完全使用非托管代码(在 Visual Studio 6 中编译的 C++ 和 VB6 组件)开发。我们有一堆 C++ 应
我正在用 C# 编写 WinForms 应用程序。 在应用程序中的某个时刻,我生成一个新的 STA 线程(创建线程,然后 SetApartmentState ),它创建一个新表单,然后用普通的旧 Sh
我正在为 AutoCAD 2009 开发附加组件。项目输出是一个类库。当我尝试调试和加载类库时,我收到“检测到 LoaderLock 消息”。我一直在编写这些附加组件,这是我看到的第一条此类消息。 我
我为非托管 C++ 库(与 C# 一起使用)制作了非常简单的包装器。 Wrapper 有一个非托管类和一个托管类。托管类具有非托管类的私有(private)成员并像那样使用它。 我已经完成了非常简单的
我正在尝试为 VS2010 编写一个扩展,但我每次都得到这个: 按 F5 开始调试 Visual Studio 的新实例启动 当新实例启动时,我可以看到调试主机中加载了一堆 DLL 然后它因“Load
我有几个使用 SQL CE 4.0 和 Entity Framework 的 MVC 项目。自从迁移到 Visual Studio 2012 以来,我不断收到以下错误(不是每次,但经常出现) 检测到
前段时间我发了一篇关于创建 dll 的帖子,用于注入(inject)目的,这将导致主机应用程序触发 Nvidia Optimus 笔记本电脑以“唤醒”dGpu。这是必要的,因为 nvidia 在这里创
我是一名优秀的程序员,十分优秀!