Delphi 7中的Apache 2.2.21模块错误(无法将特定模块加载到服务器中)

时间:2015-03-01 22:55:10

标签: apache delphi

我在Delphi 7中创建了一个Apache 2.2.21模块(DSO)并更改了httpd.conf文件,但是当我重新启动Apache时,它会“无法加载到服务器中。无法找到指定的模块”错误。我仔细检查了我的模块(.so文件)是否在apache modules文件夹中。这是我的电脑的详细信息:

  1. 操作系统:Windows 7 64位
  2. Apache:2.2.21(Win32)mod_ssl / 2.2.21 OpenSSL / 0.9.8r
  3. Delphi 7 32位
  4. 我还根据leonardo的博客转换了我的httpd2.pas副本,用于Delphi 7的Apache 2.2.x版本兼容性更改,但仍然遇到同样的问题。

    以下是代码和配置文件:

    1. httpd2.pas
    2. 可在此处找到完整文件(https://github.com/stijnsanders/xxm/blob/master/Delphi/apache/HTTPD2.pas

      1. 我的模块的httpd.conf条目
      2. LoadModule myapachews_module modules/mod_myapachews.so
        <Location /rktest>
            SetHandler mod_myapachews-handler
        </Location>

        1. myapache_ws.dpr
        2. library myapachews;
          
          uses
            WebBroker,
            ApacheTwoApp,
            mMain in 'mMain.pas' {WebModule1: TWebModule};
          
          {$R *.res}
          
          {$E so}
          {$LIBPREFIX 'mod_'}
          
          exports
            apache_module name 'myapachews_module';
          
          begin
            Application.Initialize;
            Application.CreateForm(TWebModule1, WebModule1);
            Application.Run;
          end.

          1. mMain.pas
          2. unit mMain;
            
            interface
            
            uses
              SysUtils, Classes, HTTPApp;
            
            type
              TWebModule1 = class(TWebModule)
                procedure WebModule1WebActionItem1Action(Sender: TObject;
                  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
              private
                { Private declarations }
              public
                { Public declarations }
              end;
            
            var
              WebModule1: TWebModule1;
            
            implementation
            
            {$R *.dfm}
            
            procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;
              Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
            begin
              Response.Content := '<H1>Hello World</H1>';
            end;
            
            end.

            1. mMain.dfm
            2. object WebModule1: TWebModule1
                OldCreateOrder = False
                Actions = <
                  item
                    Name = 'WebActionItem1'
                    OnAction = WebModule1WebActionItem1Action
                  end>
                Left = 343
                Top = 116
                Height = 292
                Width = 374
              end

              任何帮助或信息都将受到高度赞赏。

              先谢谢, Ravinder

1 个答案:

答案 0 :(得分:0)

虽然我很荣幸能够链接到我的存储库,但我很遗憾你还没看过xxm项目,因为它正好服务于你试图实现的目的。它还有一个Apache HTTPD处理程序,可以为您加载xxm项目(并使它们可以通过IIS,InternetExplorer&#iinternterProtocol或本地xxmHttp进行调试)。

回答你的问题。在Windows上,您可以继续使用.dll文件扩展名,因为Delphi 7编译器不提供ELF二进制文件,所以不需要将其更改为.so这是不正确的。请记住使用正斜杠,或将反斜杠加倍,因为这些服务作为转义字符。

同时检查文件是否已正确写入Apache HTTPD的modules目录。或者,您可以使用LoadModule指令在httpd.conf中使用绝对路径。