3

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

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

4

3 回答 3

1

有趣的问题。我不知道 Win32 中内置的任何内容 - 我认为您可能必须创建一个 DLL,该 DLL 具有一个 API,当它收到各种附加/分离消息时,它会发出事件信号或发布消息。

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

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

于 2008-10-09T16:42:15.463 回答
1

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

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


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

于 2008-10-09T09:39:20.167 回答
0

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

对于 Exes,您有 InitInstance 和 ExitInstance,您可以等效地处理它们!

于 2008-10-09T14:28:37.027 回答