我正在开发一个基于 Apache 的应用程序,其中包含几个自定义模块。
我想与其他人分享一个模块中的一些功能。我需要在分层阶段将它们连接在一起。我想使用带有模块名称的 GetModuleHandle + GetProcAddress(它将仅在 Windows 下运行) - 但只有当 Apache 服务器已加载该模块时,这才会成功。
有没有办法配置 Apache 模块的加载顺序。我只需要控制我的模块——其他模块无关紧要。
提前致谢。
我正在开发一个基于 Apache 的应用程序,其中包含几个自定义模块。
我想与其他人分享一个模块中的一些功能。我需要在分层阶段将它们连接在一起。我想使用带有模块名称的 GetModuleHandle + GetProcAddress(它将仅在 Windows 下运行) - 但只有当 Apache 服务器已加载该模块时,这才会成功。
有没有办法配置 Apache 模块的加载顺序。我只需要控制我的模块——其他模块无关紧要。
提前致谢。
如果您尝试从模块的源代码控制 Apache 钩子调用顺序,您可以尝试使用APR_HOOK_FIRST
、APR_HOOK_MIDDLE
和APR_HOOK_LAST
. 或者您可以专门命名其他模块以强制执行排序约束。从文档:
...“有两种机制可以做到这一点。第一种相当粗略的方法,允许我们粗略地指定挂钩相对于其他模块的运行位置。最后一个参数控制它。有三个可能的值:APR_HOOK_FIRST、APR_HOOK_MIDDLE和 APR_HOOK_LAST。
“使用任何特定值的所有模块都可以相对于彼此以任何顺序运行,但是,当然,所有使用 APR_HOOK_FIRST 的模块都将在 APR_HOOK_MIDDLE 之前运行,它们在 APR_HOOK_LAST 之前。不关心何时运行的模块应该使用 APR_HOOK_MIDDLE . 这些值是隔开的,因此像 APR_HOOK_FIRST-2 这样的位置可能会比其他函数稍早挂钩。 ...
“另一种方法允许更好的控制。当一个模块知道它必须在一些其他模块之前(或之后)运行时,它可以通过名称指定它们。第二个(第三个)参数是一个以 NULL 结尾的字符串数组,由必须在当前模块之前(之后)运行的模块的名称。例如,假设我们希望“mod_xyz.c”和“mod_abc.c”在我们之前运行,那么我们将挂钩如下......” [示例如下]