【问题标题】:How do I create a DLL initialization routine?如何创建 DLL 初始化例程?
【发布时间】:2011-03-29 22:47:03
【问题描述】:

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

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

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

【问题讨论】:

  • 您需要通过在文档中多次提醒读者来获得它。仔细检查它是否已完成将是明智的。但如果这是可能的,那么你也可以延迟初始化它。
  • 如果初始化带参数,可能无法进行延迟初始化。

标签: windows winapi dll


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    这方面的典型例子是InitCommonControlsEx()。您必须让 DLL 的用户以同样的方式调用您的初始化和终止例程。

    【讨论】:

      【解决方案3】:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-06
        • 2018-02-03
        • 1970-01-01
        • 2012-05-23
        • 1970-01-01
        相关资源
        最近更新 更多