0

我正在将旧应用程序从 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;

我错过了什么?

有什么建议吗?

问候。

毛里齐奥。

4

0 回答 0