如何创建DLL初始化例程?

时间:2011-03-29 22:47:04

标签: windows winapi dll

DllMain Entry Point documentation中,作者发表以下评论:

  

要提供更复杂的初始化,请为DLL创建初始化例程。您可以要求应用程序在调用DLL中的任何其他例程之前调用初始化例程。

在C / C ++中,如何创建不同的例程并要求应用程序在任何其他例程之前调用它?

3 个答案:

答案 0 :(得分:2)

初始化例程可以是任何exported函数。诀窍是“要求其他应用程序调用它”。要强制执行它,您需要检查是否已在几乎所有其他导出函数中调用它。如果每个导出的函数都有一些公共前缀代码,那么这将是检查初始化函数是否已被调用的好地方。

但是,如果必须检查是否已在每个入口点调用它,那么如果您实际上在未调用该函数时自动调用该函数,则DLL的使用者可能会更容易。这确实需要一些额外的工作来使其线程安全。你需要一个关键部分(或互斥,信号量等)来确保它只被调用一次。

答案 1 :(得分:2)

这个典型的例子是InitCommonControlsEx()。您必须以相同的方式使DLL的用户调用初始化和终结例程。

答案 2 :(得分:1)