【发布时间】:2011-03-25 19:19:00
【问题描述】:
Delphi XE 中 Apache 方法 apr_pool_create_ex 的正确用法是什么?
我以前创建过 Apache 模块,但都是处理程序。现在我正在开发一个服务提供者。已经创建了一个骨架模块,Apache 正在调用我的 child_init 回调方法。在 child_init 方法中,我成功调用了 ap_pool_create_ex*(返回 APR_SUCCESS),但是在离开 child_it 调用后,我在第三个或第四个工作线程的(httpd.exe)生成期间收到访问冲突(第三个在事件中显示日志)。
procedure provider_child_init(pchild: Papr_pool_t; s: Pserver_rec); cdecl;
var
rv : apr_status_t;
mypool : Papr_pool_t;
begin
rv := -1;
rv := apr_pool_create_ex(@mypool,pchild,nil,nil);
end;
AV 消息是:
“项目 C:\Apache2.2\bin\http.exe 连续提出太多 例外:'访问冲突在 0x00000000:读取地址 0x00000000'。进程停止。使用步骤 或运行以继续”
事件日志:
…
Thread Start: Thread ID: 5652. Process httpd.exe (4212)
Thread Start: Thread ID: 5132. Process httpd.exe (4212)
Thread Start: Thread ID: 5988. Process httpd.exe (4212)
注意:AV 出现在线程 ID 5988 和 4212 是父 httpd.exe 进程。
- Windows“libapr-1.dll”不包含“apr_pool_create”,这就是我使用“_ex”版本的原因。知道为什么缺少 apr_pool_create 吗?我看到 apr_pool_create 在其他成功的 modules 中使用,尽管它们是用“C”编写的。
操作系统:Windows 7 企业版 64 位
Apache:2.2.17.0
IDE:Delphi XE
【问题讨论】:
-
关于 apr_pool_create 丢失的原因,它可能不是从 DLL 导出的,因为你可以用它做的任何事情你也可以用 apr_pool_create_ex 做,等等。不过,用 C 编写的模块仍然可以静态链接。
标签: delphi delphi-xe apache-modules