在Delphi XE中正确使用Apache方法apr_pool_create_ex是什么?在Delphi XE中正确使用Apache方法apr_pool_create_ex是什么?
我已经创建了Apache模块,但都是Handlers。现在我正在开发服务提供商。一个框架模块已经被创建,我的child_init回调方法被Apache调用。在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 提出太多连续 例外:“访问冲突在 00000000:地址读 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)
注:发生在线程ID的AV 5988和4212是父httpd.exe进程。
- Windows“libapr-1.dll”不包含“apr_pool_create”,这就是为什么我使用“_ex”版本的原因。任何想法为什么apr_pool_create缺失?我看到apr_pool_create被用于其他成功的modules,尽管它们是用'C'写成的。
OS:Windows 7企业版64位
阿帕奇:2.2.17.0
IDE:德尔福XE
关于apr_pool_create丢失的原因,可能不会从DLL中导出,因为您可以使用它执行任何操作,您也可以使用apr_pool_create_ex等操作。尽管如此,用C编写的模块仍然可以静态链接到它。 – 2011-03-26 00:34:31