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 FixHttpd2.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