F
fly520
Unregistered / Unconfirmed
GUEST, unregistred user!
我要动态调用一个bpl包,这个bpl包要里面的函数要能操作我主程序的主窗体界面,将菜单栏添加菜单等,我静态调用没有问题,动态就出地址错误,我想问这种方式可以吗,有做过的没有。原码我贴上:<br>procedure initmain(ParentApplication: TApplication; MainMenu: TMainMenu; TreeView: TTreeView); stdcall;<br>var<br> Nzhuoyue, Nshuidian :TmenuItem;<br> rzhuoyue, rshuidian : TTreeNode;<br>begin<br> // Application:=ParentApplication;<br> Nzhuoyue:= TmenuItem.Create(nil);<br> Nzhuoyue.Caption := 'aaaaaaaaa;<br> Nshuidian:= TmenuItem.Create(nil);<br> Nshuidian.Caption := '水电查询';<br> Nzhuoyue.Add(Nshuidian);<br> MainMenu.Items.Insert(4,Nzhuoyue);<br>end;<br>这个是我在bpl包里面定义的一个方法使主窗体界面的菜单添加两项。<br>我有把bpl的窗体注册和反注册:<br>nitialization<br> RegisterClass(Tfrmzhouyue);<br><br>finalization<br> UnRegisterClass(Tfrmzhouyue);<br><br>主程序中调用:<br> try<br> pluginname := 'aa.bpl';<br> h := LoadPackage(pluginname);<br> Plugininitmain:=getprocaddress(h,'initmain');<br> if (@Plugininitmain <> nil) then<br> begin<br> Plugininitmain(Application, MainMenu,frameTree1.tvLeftMenu);<br> end;<br> finally<br> UnLoadPackage(h);<br> end;<br><br>在调用bpl包的时候如果我在bpl包里的函数中加入<br>Application:=ParentApplication;<br>则会自动关闭我的程序,不加则报地址错误,添加菜单出错。<br><br>我在主程序中的包中的option中引用这个bpl包则不会出错,但这是静态调用吧,我想不要引用,直接动态调用。