J'ai une ISAPI développée avec Delphi, et j'essaie de modifier le fonctionnement des fonctions suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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