[D7 - VCL - ISAPI] Problème de passages de paramètres par adresse.
J'ai une ISAPI développée avec Delphi, et j'essaie de modifier le fonctionnement des fonctions suivantes:
Code:
1 2 3 4
|
function GetExtensionVersion( var Ver : THSE_VERSION_INFO ) : BOOL;
function HttpExtensionProc( var ECB : TEXTENSION_CONTROL_BLOCK ) : DWORD
function TerminateExtension( dwFlags : DWORD ) : BOOL; |
Dans une ISAPI Dll, ces trois fonctions sont les points d'entrées que IIS utilise pour charger cette ISAPI. Le problème est que nous avons constatés un problème dans la gestion des threads de notre ISAPI. Donc on essaie de trouver une solution.
Pour ma part, étant donné que ces trois fonctions sont exportées, je me suis dis qu'on pouvait faire une dérivation, et externaliser d'autres fonctions mais sous ces noms là.
En gros, cela donne ceci
Code:
1 2 3 4 5
|
exports
Test_GetExtensionVersion name 'GetExtensionVersion',
Test_HttpExtensionProc name 'HttpExtensionProc',
Test_TerminateExtension name 'TerminateExtension'; |
Dans une unité j'ai donc défini ces trois fonctions de la manière suivante.
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 26 27 28 29
|
unit TestOverride;
interface
uses ISAPI, Windows;
function Test_GetExtensionVersion(var Ver: THSE_VERSION_INFO): BOOL; stdcall;
function Test_HttpExtensionProc(var ECB: TEXTENSION_CONTROL_BLOCK): DWORD; stdcall;
function Test_TerminateExtension(dwFlags: DWORD): BOOL; stdcall;
implementation
uses HTTPApp, ISAPIApp;
function Test_GetExtensionVersion(var Ver: THSE_VERSION_INFO): BOOL;
begin
Result := GetExtensionVersion( Ver );
end;
function Test_HttpExtensionProc(var ECB: TEXTENSION_CONTROL_BLOCK): DWORD;
begin
Result := HttpExtensionProc( ECB );
end;
function Test_TerminateExtension( dwFlags: DWORD): BOOL;
begin
Result := TerminateExtension( dwFlags );
end;
end. |
Le léger soucis se trouve au niveau de la compilation, qui me dit que pour les lignes où se trouve l'appel aux fonctions HttpExtensionProc et GetExtensionVersion ( définie par Borland ), j'ai l'erreur suivante : "Les types des paramètres VAR originaux et formels doivent être identiques"
Chose étrange, car lorsque je vais voir dans le source de la VCL, les éléments ont la même signature.
Code:
1 2 3 4
|
function GetExtensionVersion(var Ver: THSE_VERSION_INFO): BOOL;
function HttpExtensionProc(var ECB: TEXTENSION_CONTROL_BLOCK): DWORD;
function TerminateExtension(dwFlags: DWORD): BOOL; |
Quelqu'un aurait-il une idée ?
Merci