在一个exe中的DllMain?

时间:2008-10-09 09:18:40

标签: windows dll

是否可以在不使用任何额外dll的情况下接收DllMain类似于独立exe中的线程附加/分离的通知?

编辑:这只是一个与我正在进行的某些测试有关的理论问题。不是现实生活中的情况。

3 个答案:

答案 0 :(得分:1)

没有外部代码在线程上运行并加载可执行文件,因此没有线程附加/分离通知[1]。可执行文件中的代码通常控制线程[2]。

如果你描述你的场景,人们可能会给你一些如何实现它的想法。


[1]好吧,大多数时候。可以在另一个进程中加载​​可执行文件,但人们通常不会这样做 [2]某些例外情况是线程模型和线程是由OS创建的,而不是可执行代码。这些主要与COM / RPC有关。

答案 1 :(得分:1)

有趣的问题。我不知道Win32中内置了什么 - 我认为你可能不得不打开一个DLL,它有一个API,当它收到各种附加/分离消息时会发出事件或发布消息。

不需要单独的DLL但需要一些黑客技巧的替代方法是使用调试API(具体为WaitForDebugEvent())。如果您的应用程序具有特殊的“测试”模式(可能由命令行选项指示),除了使用带有CreateProcess()标志的DEBUG_ONLY_THIS_PROCESS重新启动exe之外什么都不做,那么父('调试器')进程可以调用WaitForDebugEvent()来获取线程开始和结束事件的通知以及一堆其他有趣的事件。父进程可以将它们作为消息传递给子进程,也可以通过发送事件信号(如果这是您想要的)或执行自己的日志记录(如果这就是您需要的那些)。

绝不是一件简单的事情,但它可以工作,不需要单独的DLL或图像,只需要一个特殊的模式来执行这些测试。

答案 2 :(得分:0)

您的问题是在进程加载和卸载时收到通知。这更适用于DLL,因为它们正被其他进程加载。

对于Exes,你有InitInstance和ExitInstance,你可以等效处理!