Van een package heb ik twee versies gemaakt, een versie zonder geen databasefunctionaliteit heeft (DlgD7) en een die dat wel heeft (DBDlgD7). Ze refereren als volgt naar elkaar:
Nu het probleem. DlgConsts.pas is een unit die alleen resourcestrings bevat. De meeste resourcestrings worden gebruikt in Dlg.pas, maar niet allemaal. Er zijn vier resourcestrings waaraan alleen wordt gerefereerd in DBDlg.pas. Het gevolg is dat als package DlgD7 wordt gecompileerd, de compiler constateert dat er nergens referenties zijn naar die vier resourcestrings en ze daarom niet in het package worden meegecompileerd. Als ik vervolgens DBDlgD7 compileer, klaagt de compiler natuurlijk dat die vier resourcestrings afwezig zijn. De precieze foutmelding van de compiler is:
Nu kan ik natuurlijk die vier strings naar een aparte unit verplaatsen - DBDlgConsts.pas of zo - en die aan de contains sectie van DBDlgD7 toevoegen. Daarmee is het probleem opgelost. Maar is er eigenlijk geen nette manier om de compiler die vier resourcestrings expliciet te laten meecompileren?
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
| package DlgD7; requires rtl, vcl, designide; contains Dlg in 'Dlg.pas', DlgConsts in 'DlgConsts.pas', DlgReg in 'DlgReg.pas'; end. |
Delphi:
Hier lijkt me weinig mis mee, de DB-versie gebruikt gewoon de niet-DB-versie.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package DBDlgD7; requires rtl, vcl, dbrtl, dsnap, designide, DlgD7, vclx; contains DBDlg in 'DBDlg.pas', DBDlgReg in 'DBDlgReg.pas'; end. |
Nu het probleem. DlgConsts.pas is een unit die alleen resourcestrings bevat. De meeste resourcestrings worden gebruikt in Dlg.pas, maar niet allemaal. Er zijn vier resourcestrings waaraan alleen wordt gerefereerd in DBDlg.pas. Het gevolg is dat als package DlgD7 wordt gecompileerd, de compiler constateert dat er nergens referenties zijn naar die vier resourcestrings en ze daarom niet in het package worden meegecompileerd. Als ik vervolgens DBDlgD7 compileer, klaagt de compiler natuurlijk dat die vier resourcestrings afwezig zijn. De precieze foutmelding van de compiler is:
Nu worden alle units netjes gecompileerd met {$IMPORTEDDATA ON}, dus dat is het probleem niet. Het eigenlijke probleem is dat de compiler de vier resourcestrings die in DlgD7 niet worden gebruikt gewoon niet meecompileert.Error Need imported data reference ($G) to access '<1e resourcestring>' from unit 'DBDlg'
[zelfde melding voor de overige 3 resourcestrings]
Nu kan ik natuurlijk die vier strings naar een aparte unit verplaatsen - DBDlgConsts.pas of zo - en die aan de contains sectie van DBDlgD7 toevoegen. Daarmee is het probleem opgelost. Maar is er eigenlijk geen nette manier om de compiler die vier resourcestrings expliciet te laten meecompileren?
Een goede grap mag vrienden kosten.