2012-04-24 44 views
1

我正在开发一个基于Apache的应用程序少巫婆自定义模块。有没有一种方法来确定Apache模块的加载顺序

我想与其他人分享一个模块中的一些功能。 我需要在stratup阶段将它们连接在一起。 我想用一个模块名称来使用GetModuleHandle + GetProcAddress(它只能在Windows下运行) - 但是只有当模块已经被Apache服务器加载时,它才会成功。

有没有办法配置Apache模块的加载顺序。 我只需要控制我的模块 - 其他模块是不相关的。

提前致谢。

+1

我想(但我不确定,所以不要把它当作权威)模块按LoadModule指令出现在配置文件。如果'GetModuleHandle'失败并且记录顺序非常重要的事实,您应该可能会失败并返回错误。 – larsks 2012-04-24 15:09:14

回答

1

如果您试图从模块的源代码控制Apache挂接呼叫顺序,则可以尝试使用APR_HOOK_FIRST,APR_HOOK_MIDDLEAPR_HOOK_LAST。或者你可以专门命名其他模块来强制排序约束。从docs

......“有这样做的两种机制,第一,比较简陋,方法,允许我们指定大致在钩运行相对于其他模块的最后一个参数控制这一点。有三种可能的值: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”,那么我们会挂钩如下所示......“[后面的例子]

相关问题