如何动态显示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.