[Delphi 2005][IntraWeb]StandAlone => Dll pour Apache
Bonjour,
J'ai lu le tutoriel de Jean-Pierre Lamon sur Intraweb (http://jplamon.developpez.com) et en particulier la section sur le déploiement de l'application. Seulement avec l'évolution d'IW (beaucoup de changements entre la version livrée avec Delphi 7 et celle avec Delphi 2005), le squelette de l'application et les unités utilisées ne semblent plus être les mêmes ! On n'a par exemple pas de IWInitStandAlone dans le code du projet.
Le code du projet quitte de (codé avec Delphi 7):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| program DNautes;
{PUBDIST}
uses
IWInitStandAlone,
ServerController in 'ServerController.pas' {IWServerController: TDataModule},
IWUnit1 in 'IWUnit1.pas' {formMain: TIWForm1},
DatamoduleUnit in 'DatamoduleUnit.pas' {DataModule1: TDataModule},
uWin2 in 'uWin2.pas' {fWindow2: TIWPageForm};
{$R *.res}
begin
IWRun(TFormMain, TIWServerController);
end. |
tel qu'indiqué dans le tutoriel (par exemple) à :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| program Project1;
{%DeployDocTool 'Deployment.bdsdeploy'}
uses
Forms,
IWMain,
IWForm1 in 'IWForm1.pas' {MainForm111: TIWAppForm},
ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},
UserSessionUnit in 'UserSessionUnit.pas' {IWUserSession: TIWUserSessionBase},
Unit1 in 'Unit1.pas';
{$R *.res}
begin
Application.Initialize;
Application.CreateForm(TformIWMain, formIWMain);
Application.Run;
end. |
Sous Delphi 2005.
J'aimerai donc pouvoir déployer l'application non pas en standalone mais en dll et l'intégrer dans Apache. D'après les recherches que j'ai pu faire, il fallait modifier le fichier HTTPD2.pas pour fonctionner avec ma version d'Apache (2.0.54) et recompiler les fichiers ApacheTwoApp.pas et ApacheTwoHTTP.pas; cela est déjà fait (voir l'article de Brian Long => http://www.blong.com/Articles/Apache%20For%20Windows/ApacheWindows.html#AboutBrian ).
En définitive donc, j'obtiens ceci comme fichier du projet (transformation du fichier de projet du standalone précédent)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| library Project1;
{%DeployDocTool 'Deployment.bdsdeploy'}
uses
Forms,
IWInitISAPI,//<- d'après le tut de Jplamon, il faut inclure cette unité...
ApacheTwoApp,
IWMain,
IWForm1 in 'IWForm1.pas' {MainForm111: TIWAppForm},
ServerController in 'ServerController.pas' {IWServerController: TIWServerControllerBase},
UserSessionUnit in 'UserSessionUnit.pas' {IWUserSession: TIWUserSessionBase},
Unit1 in 'Unit1.pas';
{$R *.res}
{D'après le tut de Brian Long, il faut exporter apache_module. Et cela requiert l'ajout de ApacheTwoApp dans les uses}
exports
apache_module name 'MyApacheModule';
begin
Application.Initialize;
Application.CreateForm(TformIWMain, formIWMain);
Application.Run;
end. |
J'ai par ailleurs modifié l'entête de l'unité ServerController, qui devient :
Code:
1 2 3 4 5 6
| uses
SysUtils, Classes, IWServerControllerBase, IWBaseForm,
// For OnNewSession Event
UserSessionUnit, IWApplication, IWAppForm,
// HTTPApp; //<- Initiallement HTTPApp est inclus, j'ai remplacé par ApacheTwoHTTP
ApacheTwoHTTP; |
Après tout cette manipulation, j'ai essayé donc de charger le module dans Apache : (extrait de httpd.conf)
Citation:
#Load MyModule module
LoadModule MyApacheModule "D:/Dev/Test/IntraWeb/Project1.dll"
Et j'ai une jolie exception au démarrage d'apache :? :
Citation:
---------------------------
Apache.exe - Erreur d'application
---------------------------
L'exception Exception logicielle inconnue (0x0eedfade) s'est produite dans l'application à l'emplacement 0x77e4d756.
---------------------------
OK Annuler
---------------------------
Il y'a absolument rien d'écrit dans le fichier log d'erreur d'Apache...
Voilà, y'a-t-il un utilisateur plus avertit d'IW (sous D 2005) qui pourrait m'aider ?
D'avance, je vous remercie.