intraweb中的类类别转换无效

时间:2015-07-01 10:00:26

标签: delphi casting intraweb

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

我错过了什么?

有什么建议吗?

问候。

莫里吉奥。

0 个答案:

没有答案