我将旧应用程序从delphi7移植到delphi xe8 从intraweb 8到intraweb XIV
我的应用程序细分为主程序和许多子程序包 它与旧组件完美配合。
使用theese新组件,我现在尝试生成并将页面返回到服务器控制器,从子包创建这样的页面。 如果我从主应用程序生成页面,它可以工作。
在程序TIWServerController.IWServerControllerBaseGetMainForm中 我调用一个我的组件(packman)的过程,试图从子包中获取一个主窗口。 这是servercontroller函数
procedure TIWServerController.IWServerControllerBaseGetMainForm(var vMainForm : TIWBaseForm);
begin
VMainForm := PackMan.MainLoginForm(webApplication);
end;
这是packman函数:
function tPackMan.MainLoginForm (aOwner:tComponent) : tIwAppForm;
var Proc : tGetMainFormProc;
begin
@Proc := GetProcAddress (LoginPkg,'MainForm');
Result := Proc(aOwner);
end;
这是程序类型的定义:
tGetMainFormProc = function (aOwner:tComponent): tIwAppForm;
这是子包(packlogin)中的MainForm过程。 最初我试图创建原始形式,充满组件, 之后,我从原始表单中删除了所有组件,但没有成功, 最后我尝试构造一个空表单,如下例所示:
function MainForm (aOwner:tComponent): tIWAppForm;
begin
Result := tIWAppForm.Create(aOwner);
end;
exports MainForm;
我使用几个Outputdebugstring消息跟踪了程序行为(这里没有显示),我得出以下结论:
1)包中的Mainform过程似乎返回有效的tIwAppform
2)此Object正确返回到IWServerControllerBaseGetMainForm过程 并且正确分配了变量VMainForm。
3)如果我检查这个变量的classname属性,我看到它有值" tIWAppform"。
异常似乎是在程序返回时生成的。 我在IWServerControllerBaseException过程中拦截了它 使用以下代码:
procedure TIWServerController.IWServerControllerBaseException(
AApplication: TIWApplication; AException: Exception;
var Handled: Boolean);
begin
Dump ('UNEXPECTED EXCEPTION ' + AException.message);
Handled := true;
end;
我错过了什么?
有什么建议吗?
问候。
莫里吉奥。