Plugin/paquet : class introuvable [Résolu]

cs_phoenyx 32 Messages postés vendredi 11 octobre 2002Date d'inscription 8 mars 2007 Dernière intervention - 23 août 2005 à 10:36 - Dernière réponse : cs_phoenyx 32 Messages postés vendredi 11 octobre 2002Date d'inscription 8 mars 2007 Dernière intervention
- 25 août 2005 à 11:23
bonjour à tous,

j'ai un frame dans un paquet d'execution que je voudrais instancier dans mon appli.
je charge le bpl (apparement pas de problème) mais à la récupération de la class elle est introuvable.


<HR>

Sources :

voila le code du frame :

unit uCustomPluginFrame;
interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;


type
TCustomPluginFrame = class(TFrame)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
constructor Create(AOwner: TComponent); override;
property Caption;
end;


implementation


{$R *.dfm}


{ TCustomPluginFrame }


constructor TCustomPluginFrame.Create(AOwner: TComponent);
begin
inherited;


end;


procedure TCustomPluginFrame.Button1Click(Sender: TObject);
begin
Edit1.Text := DateToStr(Now);
end;


Initialization
RegisterClass(TCustomPluginFrame);
Finalization
UnregisterClass(TCustomPluginFrame);

end.

là celui de l'appli :

unit uMain;


interface


uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;


type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Déclarations privées }
Module: THandle;
public
{ Déclarations publiques }
end;


var
Form1: TForm1;


implementation


{$R *.dfm}


procedure TForm1.FormCreate(Sender: TObject);
var
MaClasse: TPersistentClass;
Frame: TFrame;
begin
Module := LoadPackage('TestPlugin.bpl'); //chargement du paquet
if Module = 0 then
raise Exception.Create('Package inconnu');
MaClasse := GetClass('TCustomPluginFrame'); //récupération de la classe
if MaClasse = nil then
raise Exception.Create('Classe non trouvée');
Frame := TFrame(MaClasse).Create(Self); //instanciation du frame
Frame.Parent := Self;
end;


procedure TForm1.FormDestroy(Sender: TObject);
begin


UnloadPackage(Module); //libération du paquet
end;


end.


<HR>

GetClass me renvoie nil alors qu'à priori TCustomPluginFrame est enregistré au chargement du paquet.

quel est le problème ?

à terme j'aurais une classe générique connue de mon appli, et N classes dérivant de cette dernière que je voudrais charger quand j'en ai besoin. Peut-être que la méthode des paquet n'est pas appropriée.

merci d'avance pour vos réponses.

[}:)] PhoenyX [}:)]
Afficher la suite 

2 réponses

Répondre au sujet
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 24 août 2005 à 23:02
+3
Utile
A priori, il ne manque rien. Mais...
Jette donc un oeil sur cette page web : Dynamic packages with Delphi et vérifie bien chaque point par rapport à ton projet et reviens nous dire ce qu'il manquait pour que ça fonctionne.


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Delphiprog
cs_phoenyx 32 Messages postés vendredi 11 octobre 2002Date d'inscription 8 mars 2007 Dernière intervention - 25 août 2005 à 11:23
+3
Utile
c'est bon j'ai trouvé le détail qui change tout.
mes sources étaient bonnes, à optimiser bien sûr, mais fonctionnelles.
c'étaient les options du projet qui n'étaient pas bonnes : l'appli utilisatrice du plugin doit utiliser uniquement des paquets d'exécution (projet\options\paquets\construire avec les paquets d'exécution)

merci pour le coup de pouce.

[}:)] PhoenyX [}:)]
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_phoenyx

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.