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) この変数の classname プロパティを調べると、値が "tIWAppform" であることがわかります。

プロシージャリターン​​で例外が発生するようです。次のコードを使用して、プロシージャ IWServerControllerBaseException でインターセプトしました。

procedure TIWServerController.IWServerControllerBaseException(
  AApplication: TIWApplication; AException: Exception;
  var Handled: Boolean);
begin
    Dump ('UNEXPECTED EXCEPTION ' + AException.message);
    Handled := true;
end;

何が欠けていますか?

なにか提案を ?

よろしく。

マウリツィオ。

4

0 に答える 0