最近在做一个小项目,我将所有的窗体封装至dll当中.dll和exe都带包运行.exe和dll都将第一引用ShareMem.架构是这样
exe中DM为全局DataModule.里面放有dxSkinController1和cxLookAndFeelController1,用来做整个程序的界面外观控制.
TcxLocalizer,用来做汉化
再显示一个Main窗体.为所有窗体的MidForm.在此窗体调用封装好的Dll窗体..
但是实际调用中.Dll窗体装体调用后,有时会现现dll窗体中cxgrid没有完全汉化的问题,如分组栏是英文,列的过滤条件是中文.有时又完全汉化. 并且Dll窗体关闭出现问题.报下面的错误:
---------------------------
Application Error
---------------------------
Exception EAccessViolation in module uxtheme.dll at 00001531.Access violation at address 5ADC1531 in module 'uxtheme.dll'. Read of address 00000014.
---------------------------
确定
---------------------------此问题应该是外观样式出现问题.难到是cx控件系列冲突的问题?还是我软件架构出现问题?我确定我程序当中没有引用TXPMainFest控件,所有的控件都是cx系列的.除了会使用delphi原装的Tpanel,TMainMenu,TPopupMenu,TAction,外.没有使用delphi原装的控件了.连按纽都用的cx系列的.我这样做就是为了风格统一.
以下是我初步分析,并且说明信息.使用当中.我还发现一个另外的问题.我写了一个对话框窗体taskform.dll,也封装成Dll.单次调用没问题.
单独出现没问题.如按纽触发.调用taskform.dll.在taskform.dll中的Form中点击相应的确认或取消按纽.没问题.
但是如果taskform.dll被调用二次以上.即taskform.dll中的对话框出现二次.关闭的时候会报下面的错:Application Error
First chance exception at $7C812A6B. Exception class EInvalidPointer with message 'Invalid pointer operation'. Process Project1.exe (2952)不知道有没有朋友做过封装dll窗体的项目.你们的项目中dll窗体与exe主窗体风格是怎么一至的?有何成功的解决方案?连续出现二次时,报'Invalid pointer operation'如何解决?
exe中DM为全局DataModule.里面放有dxSkinController1和cxLookAndFeelController1,用来做整个程序的界面外观控制.
TcxLocalizer,用来做汉化
再显示一个Main窗体.为所有窗体的MidForm.在此窗体调用封装好的Dll窗体..
但是实际调用中.Dll窗体装体调用后,有时会现现dll窗体中cxgrid没有完全汉化的问题,如分组栏是英文,列的过滤条件是中文.有时又完全汉化. 并且Dll窗体关闭出现问题.报下面的错误:
---------------------------
Application Error
---------------------------
Exception EAccessViolation in module uxtheme.dll at 00001531.Access violation at address 5ADC1531 in module 'uxtheme.dll'. Read of address 00000014.
---------------------------
确定
---------------------------此问题应该是外观样式出现问题.难到是cx控件系列冲突的问题?还是我软件架构出现问题?我确定我程序当中没有引用TXPMainFest控件,所有的控件都是cx系列的.除了会使用delphi原装的Tpanel,TMainMenu,TPopupMenu,TAction,外.没有使用delphi原装的控件了.连按纽都用的cx系列的.我这样做就是为了风格统一.
以下是我初步分析,并且说明信息.使用当中.我还发现一个另外的问题.我写了一个对话框窗体taskform.dll,也封装成Dll.单次调用没问题.
单独出现没问题.如按纽触发.调用taskform.dll.在taskform.dll中的Form中点击相应的确认或取消按纽.没问题.
但是如果taskform.dll被调用二次以上.即taskform.dll中的对话框出现二次.关闭的时候会报下面的错:Application Error
First chance exception at $7C812A6B. Exception class EInvalidPointer with message 'Invalid pointer operation'. Process Project1.exe (2952)不知道有没有朋友做过封装dll窗体的项目.你们的项目中dll窗体与exe主窗体风格是怎么一至的?有何成功的解决方案?连续出现二次时,报'Invalid pointer operation'如何解决?
释放窗体,调用前先释放一下freeandnil(frmMain)