我正在将旧应用程序从 delphi7 移植到 delphi xe8 并从 intraweb 8 移植到 intraweb XIV
我的应用程序被细分为一个主程序和一些子程序包,它与旧组件完美配合。
使用这些新组件,我现在遇到一个异常,试图生成一个页面并将其返回给服务器控制器,从子包创建这样一个页面。相反,如果我从主应用程序生成页面,它可以工作。
在过程 TIWServerController.IWServerControllerBaseGetMainForm 中,我调用了我的组件(packman)的过程,该过程试图从子包中获取主窗口。这是服务器控制器功能
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) 这个对象被正确地返回到 IWServerControllerBaseGetMainForm 过程并且变量 VMainForm 被正确分配。
3)如果我检查这个变量的类名属性,我看到它的值是“tIWAppform”。
异常似乎是在过程返回时生成的。我在 IWServerControllerBaseException 过程中使用以下代码对其进行了拦截:
procedure TIWServerController.IWServerControllerBaseException(
AApplication: TIWApplication; AException: Exception;
var Handled: Boolean);
begin
Dump ('UNEXPECTED EXCEPTION ' + AException.message);
Handled := true;
end;
我错过了什么?
有什么建议吗?
问候。
毛里齐奥。