zu FAQ: WebBroker/WebSnap und der Apache



  • da der Beitrag in der FAQ schon eineinhalb Jahre her ist, interressiert mich ob es mittlerweile jemand geschafft hat eine Apache-Dll mit dem BCB6 für Apache 2.XXX zu schreiben

    mein Ansatz war (leider erfolglos) folgender:

    - Apache 2.054 installieren
    - die httpd.pas aus Souce/Internet entsprechend dem "inoffiziellen" Patch anpassen
    - Projekt erstellen, httpd.pas und apacheapp.pas hinzufügen und neu erstellen, dadurch wird eine neue httpd.dcu, httpd.obj und httpd.hpp erstellt (gleiches für apacheapp)
    - mit den neuen Dateien die alten überschreiben
    - neue Web-Anwendung für Apache-Dll mit BCB6 erstellen

    #include <WebBroker.hpp>
    #include <ApacheApp.hpp>
    #pragma hdrstop
    
    USEFORM("Unit1.cpp", WebModule1); /* TWebModule: File Type */
    //---------------------------------------------------------------------------
    #define Application Webbroker::Application
    
    #pragma link "ApacheApp.obj"
    #pragma link "webbroker.obj"
    //---------------------------------------------------------------------------
    extern "C"
    {
      Httpd::module __declspec(dllexport) Project1_module;
    }
    
    //---------------------------------------------------------------------------
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
    {
      try
      {
        if (reason == DLL_PROCESS_ATTACH) {
          strcpy(ContentType, "project1-handler");
          Apacheapp::set_module(&Project1_module);
          Application->Initialize();
          Application->CreateForm(__classid(TWebModule1), &WebModule1);
          Application->Run();
        }
      }
      catch (Exception &exception)
      {
      }
      return 1;
    }
    //---------------------------------------------------------------------------
    #undef Application
    //---------------------------------------------------------------------------
    

    - httpd.conf des Apache anpassen

    LoadModule _Project1_module modules/project1.dll
    ....
    
    <Location /project1>
         SetHandler project1-handler
    </Location>
    

    - Apache starten -> Fehler

    Cannot load C:/Apache2/modules/mod_project1.dll into server: 
    Ein der f\xfcr die Ausf\xfchrung dieser Anwendung notwendige 
    Bibliothekdateien kann nicht gefunden werden.
    

    hat jemand ne Idee?



  • Ich hab ne Lösung gefunden 😉

    man braucht:
    - ApacheTwoHttp.pas
    - ApacheTwoApp.pas
    - httpd2.pas
    - vom Apache: libapr.lib und libhttpd.lib
    - je nach Apache-Version: Dr. Bobs inoffiziellen Fix

    Httpd2.pas anpassen:
    - alle Zeilen mit {EXTERNALSYM auskommentieren \- alle Zeilen mit {HPPEMIT auskommentieren
    - Änderungen je nach Apache-Version laut Dr. Bob
    - den Abschnitt:

    LibNamePrefix = '_';       {do not localize}
      LibSuff0 = '@0';
      LibSuff4 = '@4';
      LibSuff8 = '@8';
      LibSuff12 = '@12';
      LibSuff16 = '@16';
      LibSuff24 = '@24';
      LibSuff32 = '@32';
    

    ersetzen durch

    LibNamePrefix = '';
      LibSuff0 = '';
      LibSuff4 = '';
      LibSuff8 = '';
      LibSuff12 = '';
      LibSuff16 = '';
      LibSuff24 = '';
      LibSuff32 = '';
    

    Vorgehensweise mit BCB6:
    - neue Anwendung erstellen
    - die 3 Pas-Dateien dem Projekt hinzufügen
    - die beiden Lib-Dateien mit coff2omf umwandeln (dabei natürlich die im Apachen nicht überschreiben) und dem Projekt hinzufügen
    - das Ganze kompilieren
    - die entstandenen OBJ- und DCU-Dateien in BCB6/lib/Obj kopieren (nur die der 3 Pas-Dateien)
    - die entstandenen HPP-Dateien in BCB6/Include/Vcl kopieren (nur die der 3 Pas-Dateien)

    Apache-Dll erstellen:
    - neue Web-Server-Anwendungen für Apache Shared Modul erstellen

    //---------------------------------------------------------------------------
    #include <WebBroker.hpp>
    #include <ApacheTwoApp.hpp>    [b]<- Hier Anpassen[/b]
    #pragma hdrstop
    
    USEFORM("Unit1.cpp", WebModule1); /* TWebModule: File Type */
    //---------------------------------------------------------------------------
    #define Application Webbroker::Application
    
    #pragma link "ApacheTwoApp.obj" [b]<- Hier Anpassen[/b]
    #pragma link "webbroker.obj"
    
    //---------------------------------------------------------------------------
    extern "C"
    {
      Httpd2::module __declspec(dllexport) Project1_module; [b]<- Hier Anpassen[/b]
    }
    
    //---------------------------------------------------------------------------
    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*)
    {
      try
      {
        if (reason == DLL_PROCESS_ATTACH) {
          Handler = "project1-handler";               [b]<- Hier Anpassen[/b]  
          Apachetwoapp::set_module(&Project1_module); [b]<- Hier Anpassen[/b]
    		  Application->Initialize();
    		  Application->CreateForm(__classid(TWebModule1), &WebModule1);
    		Application->Run();
        }
      }
      catch (Exception &exception)
      {
      }
      return 1;
    }
    //---------------------------------------------------------------------------
    #undef Application
    //---------------------------------------------------------------------------
    

    falls ich jetzt nichts vergessen hab, sollte das mit Apache 2.x funktionieren

    Grüße
    Linnea


Anmelden zum Antworten