Mon logiciel fait appel à des packages dynamiquement en utilisant les interfaces.
Code Delphi : 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 procedure TfrmMain.LoadPackages(iNum: integer; sName: String); type TMenuPluginFunc = function : TMenuPlugin;stdcall; TCreatePluginFunc = function : IPlugin; stdcall; var PackageHandle,Flags : integer; MenuPlugin : TMenuPluginFunc; CreatePlugin : TCreatePluginFunc; // lst : TStringList; // i : integer; begin SetLength(Plugin, iNum + 1); try Memo1.Lines.Add('Chargement du Package : ' + sName); PackageHandle := LoadPackage(sName); Except on E:Exception do begin memo1.Lines.Add('Load error : ' + E.Message); Exit; end; end; Memo1.Lines.Add('Information du Package :'); GetPackageInfo(PackageHandle,nil,Flags,ShowInfoProc); // récupération des informations pour la création d'un bouton dans la barre MenuPlugIn := GetProcAddress(PackageHandle,'GetVersionMenu'); Memo1.Lines.SaveToFile(GAPPPATH + 'LoadLog.txt'); Plugin[iNum].Name := sName; Plugin[iNum].Handle := PackageHandle; Plugin[iNum].Menu := MenuPlugIn; Plugin[iNum].Created := False; Plugin[iNum].FrameLoaded := False; // récupération du plugin CreatePlugin := GetProcAddress(PackageHandle,'CreatePlugin'); if assigned(CreatePlugin) then Plugin[iNum].Plug := CreatePlugin; end;
Pas de problème à ce niveau, les multiples plugins se chargent correctement, en pas à pas, je ne rencontre aucun soucis et je vois même en passant le curseur sur Plugin[].Menu le contenu de cette structure.
Le problème ce passe plus loin lorsque je veux créer les boutons dans l'objet TCategorieButton
Dès que je fais appel dans ma procédure
Code delphi : 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 // création des boutons j := 0; for i := low(plugin) to high(plugin) do begin sTextTemp := Plugin[i].Menu.Categorie.Caption; // L'erreur à la ligne en dessous if CategoryButtons1.Categories.Count > 0 then begin if CategoryButtons1.Categories.IndexOf(PlugIn[i].Menu.Categorie.Caption) <> -1 then Categ := CategoryButtons1.Categories.Items[j] else begin Categ := CategoryButtons1.Categories.Insert(0); end; end else Categ := CategoryButtons1.Categories.Insert(0);
J'ai essayé plusieurs choses et dès que j'utilise un objet dans cette procedure j'ai une violation d'accès (J'ai mis un simple mémo.lines.add d'un valeur du Plugin[].Menu et ca plante) et les objets existent bien dans ma form
Si quelqu'un voit pourquoi il y a cette violation.
Merci.
Partager