Je suis sous W8.1, et j'utilise Delphi 6 Personal Edition. Je conçois des DLLs pour étendre les possibilités d'un langage tiers.
Actuellement, j'ai une DLL qui est énorme (plus de 500.000 lignes, par manque de compréhension au départ). Maintenant, j'essaie d"éclater ma DLL en plusieurs unités pour des raisons de maintenabilité. Or, je me heurte à un problème de visibilité de variables.
J'ai des variables déclarées dans la DLL (fichier DPR), et ces variables contiennent des informations partagées par plusieurs fonctions, et persistantes tant que la DLL reste chargée. Mais le fait de déplacer les fonctions du fichier DPR dans une unité (fichier PAS), interdit à la fonction déplacée dans l'unité de voir la variable restée dans le DPR. Voici une version minimaliste mettant le problème en évidence:
La DLL:
et Unit1:
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 library test1; uses SysUtils, Classes, Unit1 in 'Unit1.pas'; {$R *.res} var MaVariable: integer; function MonTest():integer; stdcall; export; begin result := ChargerMaVariable(); end; begin MaVariable := 17; end.
A la compilation, j'ai le message: "Identificateur non déclaré: 'MaVariable'.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 unit Unit1; interface function ChargerMaVariable():integer; stdcall; implementation function ChargerMaVariable():integer; stdcall; begin result := MaVariable; end; end.
Question: comment puis-je faire pour voir MaVariable dans Unit1, en accès lecture et écriture ?
Partager