首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

怎么动态显示dll中的form?紧

2012-02-07 
如何动态显示dll中的form?紧急求救我现在做的一个工程要求这样:主界面左侧是一个列表,这个列表内容可以中

如何动态显示dll中的form?紧急求救
我现在做的一个工程要求这样:主界面左侧是一个列表,这个列表内容可以中数据库读出来,鼠标单击列表内容,显示对应的设置窗体。但是领导要求:设置以后会逐步增加,所以这些设置的窗体要做活的,而且主程序以后就不修改了,要动态加载这些设置窗体。
我像这样解决:创建一些窗体放在dll中,然后主程序有一个配置文件,然后根据配置文件调用不同的dll中的窗体,一个dll放一个窗体。
但是问题出现了:我尝试建立ActivexForm工程,默认为ocx,我修改编译生成dll,我用regsver32进行注册,然后我再主界面加了一个TOLEContainer控件,想把这个ActivexForm放在这个上面,我的activeXForm类名是‘TMyAF’,然后在主程序中调用OleContainer1.CreateObject('TMyAF',false);运行到这一句出错,说是无效的类别字串,这是为什么?
还有activexForm和dll中的Form有什么区别?
大家看看我的这个做法是否可行?或者有可行的方案?
在线等

[解决办法]
active Form 没有做过,但是这个其实就是一个主程序,功能都放在 dll 中了,
配置文件可以用数据库呀

不要一个窗体放一个 dll ,dll 中可以放好多的窗体呀

数据库中保存 dll 的导出函数就行了
[解决办法]
这个只要
1、建个表定义DLL文件名及DLL功能入口函数名
2、主程序统一定义DLL的接口参数,以后新加的DLL按定好的格式调用就行了,
[解决办法]
另外你的做法很奇怪:
要么你就作成原始的DLL只输出函数的 在函数中调用你的窗口 一般不会出错
[解决办法]
dll中的application 和主程序的applicaiton是不同的,雖然可以欺騙式的將主程序的給dll,但實際windows是有作保護措施的,所以dll中的form要訪問主程序的panel(dllform.parent:=mainform.panel),會無法訪問;
建議使用API: SetParent(Dllform.Handle,mainform.Panel.Handle);
另外,建議你把整個程序的架構要分清,建議寫一個主呼叫的dll,在這個dll裡面,根據參數來判斷要呼叫哪一個dll,主程序只需要調用這個dll所exports出來的函數,傳進不同的參數,比如可以通過tag來區分不同的form。這樣就不用修改主程序了,也比較安全。
建議application的切換,寫在dll裡面,可以這樣:
procedure DLLEntryPoint(dwReason: DWord);
begin
case dwReason of
DLL_PROCESS_ATTACH:;//在這裡記錄原來的application
DLL_PROCESS_DETACH:;//在這裡還原原來的application 
DLL_THREAD_ATTACH: ;
DLL_THREAD_DETACH: ; 
end;
end;

begin
DllProc :=@DLLEntryPoint;
DLLEntryPoint(DLL_PROCESS_ATTACH);
end.

热点排行