问题标签 [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.
c++ - Windows Vs 上的 DLL Main __attribute__((constructor)) Linux 上的入口点
考虑代码
EXE文件:
动态链接库
输出不同:
在窗户上
Linux
在 Windows 上,Moo 构造函数在 DLLMain 之前调用,而在 linux 上,它在使用属性((构造函数))定义的 Initializer 之后调用。
为什么?
c++ - 在 dllmain() / DLL_PROCESS_ATTACH 中允许实例化 com 对象?
在DLLMAIN()
/中加载 DLLDLL_PROCESS_ATTACH
可能会导致问题。但是可以COM Objects
使用 eq CoInitialize() / CoCreateInstance() 实例化?
编辑:问题是:在这种情况下创建 COM 实例会导致类似的错误,例如加载 DLL 吗?在我看来,加载 DLL 和创建 COM 实例在某种程度上类似。
c++ - 如何避免DLL Main?
我以前问过这个问题,尽管人们忽略了它。再说一遍,这是一个冗长的话题,因此我会尽量缩短。
当您将 DLL 注入到您不拥有的程序中时,如何避免使用 DLL Main?很多人可能都知道,例如在 DLL main 中使用线程时,它只会导致程序停止(在大多数情况下)。
我真的很想知道从注入的 DLL 中实际运行线程而不将其放入 DLL Main 的最佳方法......这对我来说似乎是不可能的,因为我不知道如何。
我知道您可以将程序必须加载的已编译 .dll 放入文件夹中,但它不是真正的 DLL,例如 DirectX,并加载所需的 DLL,但我目前正在这样做,这意味着通过控制我的程序DirectX 黑客。有人已经注入另一个程序(根据 MySQL 调试日志)。我知道这无论如何都可以用注射器来完成,但这会更难。
有谁知道一种方法,因为我现在可以杀了一个?
编辑:对于这个线程是重复的,它不是我已经使用这个注入我的 DLL。
但是,在注入的 DLL 中使用 DllMain 会导致系统停止,因为我已经达到了太多的地步。
我需要一种方法来防止系统停止,并可能在 DLLMain 之外创建线程,例如,可能是一种无需在我注入的 DLL 中使用 DLLMain 即可启动 DLL 线程的方法。
c++ - 动态链接库最佳实践 - 如何避免死锁?
背景
我已阅读Dynamic-Link Library Best Practices并了解在DllMain中我能做什么和不能做什么。
现在,假设我有一个包含许多项目的 Visual Studio 2013 解决方案。每个项目生成不同的二进制文件/lib 文件。
假设我有一些实用程序项目,生成一个所有项目都使用的 lib 文件。
现在,这个实用程序项目可能会定义一些调用的通用函数,例如,基于上面链接的LoadLibrary 函数是这样的:永远不要从 DllMain 中执行以下任务
问题
我如何实现一个通用函数,“知道”它不能使用某些 API,因为它是在
DllMain
函数范围内被调用的?是否可以访问 Windows 加载程序锁定,并在锁定时禁用某些调用或更改函数的算法?
例子
项目实用程序
项目A
项目 B
虽然对函数的调用在GetUserName()
中非常好Project B
,但在Project A
我想以避免这种情况的方式使 mu 解决方案变得聪明。
理论方法
当然,这if( IsLoaderLocked() )
不是真正的代码。只是我想在调用“危险”API 之前评估的条件示例。
c++ - C++ DllMain API 调用
这可能是显而易见的,但对我来说没有多大意义。我正在尝试创建一个要使用 C++ 注入游戏进程的 dll。我已经读过我不应该从这个方法中调用像 CreateThread 这样的东西,因为它是“危险的”。如果我有这样的另一种方法,它仍然危险吗?(伪):
如果这不安全,究竟应该怎么做?
c++ - 为什么 DLL_THREAD_DETACH 会发生两次?
我正在学习 COM。我在 DLL 中编写了一个简单的 COM 组件,并在注册表中注册了它。然后我创建了一个简单的客户端并尝试使用我的 COM 组件。但我不明白这种DllMain
行为(我也读过这个)。
我希望每个DLL_PROCESS_ATTACH
人DLL_PROCESS_DETACH
都被调用,并且每个DLL_THREAD_ATTACH
人DLL_THREAD_DETACH
都被调用(如果没有发生异常)。
但我看到一个DLL_PROCESS_ATTACH
有两个DLL_THREAD_DETACH
:
为什么会这样?
c++ - 从 DLLMain 调用托管代码
我正在编写一个非托管 dll(使用 c++ 和 WinAPI),但我想使用一些 C# 方法,因此,我使用 C++/CLI 创建了一个包装器。
但问题是:非托管 dll 将被“注入”(LoadLibrary),我被困在这里,不知道如何调用 Wrapper 函数。
非托管代码:
包装器(C++/CLI):
我不知道这里发生了什么。.NET 环境没有加载?Wrapper DLL 没有加载?(我遍历了模块并且包装器不存在)。
我必须手动初始化 CLR 吗?
我阅读了有关加载程序锁定的信息,但我不确定这是否是这里的问题。
c++ - DllMain 中的 DLL_PROCESS_DETACH 中的 C++ 代码未执行
我有一个client
和一个server
用 C++ 编写的。在client
里面,dll
在server
里面.exe
。我首先启动server
然后dll
在其中注入explorer.exe client
。当我启动client
并发送消息时,DLL_PROCESS_ATTACH
它工作正常client
并且server
正在通信。
但是当我重新启动 explorer.exe 并且dll
卸载意味着DLL_PROCESS_DETACH
应该调用它时,这意味着当我启动并向fromclient
发送消息时它也应该可以工作,但它没有。我正在使用 Windows 10 机器和 VS2015。server
DLL_PROCESS_DETACH
这是我的代码
服务器
c++ - 使用和不使用 Visual Studio 调用 dll 文件
这是我的代码 -
所以问题是,如果安装了 Visual Studio,这个函数工作正常,我可以在 e:\temp\ 文件夹中创建 DllMain.txt,但如果没有安装 Visual Studio,函数调用有问题。Explorer 无法调用此函数。更多信息在我正在尝试的编辑部分中给出。
我正在使用以下设置构建一个 dll 文件,请检查此链接
我正在为邮件客户端实现 Windows 的“发送到”协议。所以我需要构建一个 dll 并且我必须在 Windows 中将我的应用程序注册为电子邮件客户端。因此,如果用户为 Outlook 和 Thunderbird 等默认电子邮件客户端选择我的应用程序,我需要一个 dll 来执行某些任务。
示例 - 选择一个文件 ->(右键单击)发送到 -> 邮件收件人。
这里资源管理器调用 dll 文件。如果安装了视觉工作室,则完美无缺。在未安装 Visual Studio 的电脑上尝试,结果错误消息,然后我在安装 Visual Studio 后尝试并得到了我想要的结果。
我不想强迫我的用户安装 MSVC 运行时。因为如果您了解 Thunderbird(Mozilla 产品),那么 Thunderbird 可以在没有 MSVC 运行时的情况下完成这项工作。