我有工作,我需要在加载后立即在DLL中完成。这项工作涉及同步,因此无法在dllmain中完成。有没有办法在dllmain(或所有dllmains)完成后立即触发代码执行?
答案 0 :(得分:3)
在进程启动和DLL期间 初始化例程,新线程 可以创建,但它们不会开始 执行直到DLL初始化 完成了这个过程。
如果这是成立的,那么你应该能够在有问题的线程中完成你的工作,这在DLLMain完成之前不会开始。当然这会打开一些可能的同步问题,如果您使用Mutex,也许可以解决此问题。
注意:我没有试过这个,它在理论上看起来可能有效。
P.S。如果你试试,请发表评论是否有效。
答案 1 :(得分:2)
从我的观点来看,这一直是一个棘手的问题。如果DLL由您无法控制的第三方应用程序使用,则很难能够强制其他应用程序调用某些初始化函数。最终,它可能是一个要求,但是不必这样做以使用DLL(例如,初始化winsock)当然很好。
如果无法进行初始化调用,则可能需要依赖于按需发生的延迟初始化。我在DLL Best Practices上写了一篇相当不错的论文,可能值得一读。它有一个很好的列表,你可以在DLLMain内部和不能做的具体事情。我从经验中知道需要遵守这些(“不要”清单)。
答案 2 :(得分:0)
最简单的方法是将所有代码放入另一个函数中,该函数在加载库后调用。
你也可以创建一个完成工作的线程,但我不确定你要做什么。