问题标签 [dllmain]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 如何在 Go 中实现 DllMain 入口点
我正在使用 Go 构建一个 DLL。
我无法实现 windows DllMain entry point。
我的目标是当应用程序通过LoadLibrary
调用该Test
方法加载 dll 时,DllMain
也将调用该方法。然而,目前该应用程序有点陷入僵局,没有任何反应。
该应用程序是非常简单的python代码
笔记:
我正在使用
并使用
如果我删除
DllMain
,一切正常,应用程序可以Test
成功调用该方法。我知道我可以指定
switch
条件DllMain
,例如附加进程、分离进程……等等,我只是想让它尽可能简单。
windows - 如何从 DllMain 中止全局对象销毁?
我需要找到一种可靠的方法来跳过DllMain
使用DLL_PROCESS_DETACH
.
从 Microsoft Dynamic-Link Library Best Practices中,我们找到了您永远不应该在 DllMain 中执行的任务列表,并且该列表不包含ExitProcess
。
我可以假设ExitProcess
在这种情况下打电话是安全的吗?_Exit
那么应该使用其他标准 C 函数来终止进程而不完全清理资源呢?目前,我正在使用_Exit
它似乎可以正常工作。
c++ - 没有调用 Dllmain 函数
我在这里搜索,但这些问题都没有帮助我,所以是的,我会解释一下:当我的 Dllmain 函数附加到 Visual Studio 项目设置中的进程 (rundll32.exe) 时,它没有被调用我将它更改为附加到 rundll32.exe 它应该在附加时显示一个消息框,但它只是不这样做。我的代码:
谢谢
c++ - 在 Dllmain 中调用“glfwCreateWindow”时冻结
当我调用glfwCreateWindow
时DllMain
,程序冻结,CPU 使用率降至 0%。
如果我将程序类型从 更改为.dll
并.exe
替换为 ,DllMain
我的代码可以正常工作main
。
这是我的代码的一部分:
当我运行程序时,会打印 1,但是程序会冻结并且永远不会打印 2。
c++ - 使用 MSVC 的链接器中的“LNK2005 DLLMain 已定义 ...”冲突
我有一个 C++ 项目,到目前为止编译和链接都没有问题,但由于最近的计算机崩溃,我不得不重新安装所有东西,包括 Visual Studio 和我所有的 VCPKG 包。(我使用的是 VS 2022 预览版,之前是这样。)
我的项目使用了许多静态链接的库,包括英特尔的 TBB 和 Armadillo(这取决于 OPENBLAS 等)。但是,需要注意的是,即使项目使用静态链接,OPENBLAS 和 TBB 仍然需要链接 DLL。
现在我正在用以前工作的相同项目属性编译同一个项目,并且不断收到 LNK2005 错误,指出:
DllMain 已在 openblas.lib(memory.c.obj) 中定义..... tbb_debug.lib(tbb_main.obj)
如果我切换链接顺序,所有发生的都是错误更改为
DllMain 已在 tbb_debug.lib(tbb_main.obj).... openblas.lib(memory.c.obj) 中定义
[注意:在发布和调试配置中链接是同样的问题。]
现在我想不通的是为什么会发生这种情况。当然,项目依赖多个导入的 DLL 是正常的。DLL 导出它们的 DllMain 入口点函数是很正常的。
由于 PC 崩溃,我被迫将所有内容升级到绝对最新版本,我想知道这是否在某个地方引入了问题。
这是 MSVC 中的一个错误,它认为来自两个不同 DLL 的两个 DllMain 函数存在冲突?
如果这是一个真正的冲突,有人可以向我解释一下,使用第三方 DLL 构建大型项目的人不会经常发生这种情况吗?
我已经尝试了所有方法,包括全新安装 VCPKG,但没有任何帮助。
我发现完成链接的唯一选择是使用 /FORCE:MULTIPLE 选项,我真的不喜欢它,因为它可能会创建有缺陷的可执行文件。
这里的任何建议将不胜感激。