如何创建 DLL 初始化例程?

Mik*_*and 5 windows dll winapi

DllMain Entry Point 文档中,作者做了以下评论:

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

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

Mar*_*ins 3

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

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