Erreur dans le module RTL70.BPL

MURAP Messages postés 4 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 19 juin 2007 - 5 févr. 2007 à 10:38
MURAP Messages postés 4 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 19 juin 2007 - 7 févr. 2007 à 09:51
Bonjour,



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
 




Sous Delphi 7.0 Entreprise, j'ai créé un package contenant plusieurs unités et fenêtres. Dans une de mes unités, j'ai défini une procédure
procedure ouvre_utilisateurs(Connection : Tzconnection; sch_appli:string; sch_uti:string);


que j'ai mis dans la clause EXPORTS.



EXPORTS ouvre_utilisateurs;





 




Dans le programme appelant, j’ai déclaré ma procédure comme suit :



Type t_pr_ouvre_utilisateurs=procedure(Connection : Tzconnection; sch_appli:string; sch_uti:string);stdcall;





var l_ouvre_utilisateurs:t_pr_ouvre_utilisateurs;





 





 




Ensuite je charge le package.



Handle_Autorisations := loadpackage('autorisations.bpl');





 




Je récupère l'adresse de la procédure que je veux appeler



@l_ouvre_utilisateurs := getprocaddress(fm_Main.Handle_Autorisations,'ouvre_utilisateurs');





 




Quand je lance l’appel de cette procédure



l_ouvre_utilisateurs(ZConnection1,schema,sch_user)





 




j'obtiens les messages d'erreur suivant:



 




En mode débuggage :


"Le projet Projet1.exe a provoqué une classe d'exception Exception avec le message 'L'application n'a pas de licence pour cette fonctionnalité'.



 




A partir de l’exécutable :


"Exception Exception dans le module rtl70.bpl dans 0001830F"



 




Je n'arrive pas à corriger ce problème. Quelqu'un aurait une idée?

Merci.

2 réponses

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
5 févr. 2007 à 16:09
EXPORTS c'est uniquement pour les DLL, je ne sais pas ce que tu cherche a faire, mais dans des unités simple, il te suffit juste
de declarer l'unité dans les uses pour utiliser procedures, fonctions, types, constantes etc.

donc tu devrais avoir :

unit OpenUsers;

interface

procedure ouvre_utilisateurs(Connection : Tzconnection; sch_appli:string; sch_uti:string);

implementation

procedure ouvre_utilisateurs(Connection : Tzconnection; sch_appli:string; sch_uti:string);
begin
 ...
end;

end.

et pour l'utiliser :

unit Unit1;

interface

uses ..., OpenUsers;

implementation

procedure quelquonque;
begin
   ouvre_utilisateurs(..., ..., ...);
end;

end.

si tu utilise des DLL il faut faire comme cela :

unit unit1;

interface

procedure l_ouvre_utilisateur(Connection : Tzconnection; sch_appli:string; sch_uti:string); stdcall;

implementation

const
  MaDLL = 'nomlibrairie.dll';

procedure l_ouvre_utilisateur(Connection : Tzconnection; sch_appli:string; sch_uti:string); external MaDLL name 'ouvre_utilisateur';

end.

<hr size="2" width="100%" />Croc (click me)
0
MURAP Messages postés 4 Date d'inscription vendredi 24 décembre 2004 Statut Membre Dernière intervention 19 juin 2007
7 févr. 2007 à 09:51
Non, non, je parle bien de PACKAGE et la clause EXPORTS existe aussi dans les package.



En fait, les package (paquets en français), ce sont des des librairies intégrant à la fois du code et des fenêtres.



Cela sert principalement à rendre les exécutables plus légers. Puisque la plupart de mes utilisateurs n'auront pas accès à ces fenêtres, j'ai préféré mettre ce code en dehors de l'application et le charger le package uniquement si il y en a besoin.



Bref, j'ai résolu mon problème en cochant la case 'Construire avec les paquets d'exécution' dans les options de projets, onglet Paquets.

Ensuite, il faut faire Construire le projet et pas simplement le compiler. La compilation simple ne recompile que ce qui a été changé tandis que la reconstruction du projet fait une compilation totale.
0
Rejoignez-nous