[Delphi7] Resourcestring niet meegecompileerd in package

Pagina: 1
Acties:

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 04:01

Tomatoman

Fulltime prutser

Topicstarter
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:

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:
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.
Hier lijkt me weinig mis mee, de DB-versie gebruikt gewoon de niet-DB-versie.

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:
Error Need imported data reference ($G) to access '<1e resourcestring>' from unit 'DBDlg'
[zelfde melding voor de overige 3 resourcestrings]
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.

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.


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Waarom zou je die resource strings voor de Database-versie in je "normale"-versie willen?
In Delphi heb je namelijk ook de DB Consts in vcldbX.bpl en de normale Consts in vclX.bpl

[ Voor 38% gewijzigd door alienfruit op 19-03-2005 14:29 ]


  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 04:01

Tomatoman

Fulltime prutser

Topicstarter
Omdat het er maar vier zijn. Ik vind het eigenlijk een beetje overkill om voor welgeteld vier resourcestrings een aparte unit op te tuigen, al is dat wel de 'nette' manier. Als het niet anders kan doe ik het ook gewoon zo, maar ik ben benieuwd of er geen andere oplossing is.

Een goede grap mag vrienden kosten.


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 09-05 23:44

alienfruit

the alien you never expected

Ach, echt overkill is het niet vind ik -- ik neem toch aan dat je niet koud of warm wordt van een een bestandje meer of minder. Misschien zelfs overzichtelijker, maar eens zien over een betere oplossing hiervoor is :+

Verwijderd

Met een beetje logisch nadenken zou dit de oplossing moeten zijn. Zelf ff checken.
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package DBDlgD7;

requires
  rtl,
  vcl,
  dbrtl,
  dsnap,
  designide,
  DlgD7,
  vclx;

contains
  DBDlg in 'DBDlg.pas',
  DlgConsts in 'DlgConsts.pas',
  DBDlgReg in 'DBDlgReg.pas';
end.

  • Tomatoman
  • Registratie: November 2000
  • Laatst online: 04:01

Tomatoman

Fulltime prutser

Topicstarter
Verwijderd schreef op zaterdag 19 maart 2005 @ 14:40:
Met een beetje logisch nadenken zou dit de oplossing moeten zijn. Zelf ff checken.
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package DBDlgD7;

requires
  rtl,
  vcl,
  dbrtl,
  dsnap,
  designide,
  DlgD7,
  vclx;

contains
  DBDlg in 'DBDlg.pas',
  DlgConsts in 'DlgConsts.pas',
  DBDlgReg in 'DBDlgReg.pas';
end.
Dat pikt de compiler niet. Je mag in de contains sectie niet een unit noemen die via de requires sectie al in een package aanwezig is. De compiler eist bij het compileren van DBDlgD7 dat DlgConsts daar wordt verwijderd; hij biedt zelfs aan dat automatisch voor je te doen.

Een goede grap mag vrienden kosten.


Verwijderd

Misschien kan je het op korte termijn oplossen door dan toch twee units te maken die uitsluitend een include bevatten naar een centraal bestand met de constanten erin.

Volgens mij heb je dan de volgende switch nodig:
{$I ...}
of
{$INCLUDE ...}

[ Voor 4% gewijzigd door Verwijderd op 19-03-2005 18:23 ]

Pagina: 1