ActiveXモデルに準拠するため、GUIObjectの取り扱いを修正するために、検知感度を高める必要がありました。すべてのGUIObjectのドメイン タイプを持つ属性は、オブジェクトがどのように取得された場合でも、アクション図ステートメントである「SET <GUIObject> to NOTHING」を使用して、リセットしてヌルに設定する必要があります。GUIObject属性は、参照カウント メモリに対するポインタで、不要になった場合は、削除する必要があります。
多くの場合、アプリケーション ロジックで、GUIObject属性は、必要に応じて参照可変オブジェクトと対話するために、一時的に参照可変オブジェクトに対して使用されます。オブジェクトがたとえ存在しないとしても、GUIObjectは、オブジェクトに対して、参照を含めることが可能です。アプリケーション ロジックがGUIObject属性を新規参照に対して設定した場合、そのGUIObjectによって参照された既存のオブジェクトは、新規の値を設定する前に、最初にリリースされます。GUIObject属性がオブジェクト参照を含んでいる場合で、そのオブジェクトが存在し、破棄されていない場合は、GUIObjectは最初にGUIObjectをNOTHINGに設定することなく新規の値を設定することができます。しかし、初期オブジェクトが既に存在しない場合は、その参照のリリースは破棄されたオブジェクトに対する無効なポインタとなります。Genの以前のバージョンで、GUI Runtime内でこれらのオブジェクトが不完全に処理されたことにより、特定のインスタンスが正常に作動していました。(クローズ ウィンドウ イベントのような)オブジェクトが破棄される前に参照が不要な場合、GUIObjectをNOTHINGに設定することにより、オブジェクトを正しくリリースできるようになり、GUIObject属性を初期化することが可能となります。これは、オプションのステートメントではなく、また、今後のリリースすべてに対して必要となります。オブジェクトが破棄される前にGUIObjectをNOTHINGに適切に設定することに失敗すると、非常に大きなメモリリークから異常終了にわたる不具合が起きます。オブジェクトが破棄された後に、GUIObjectをNOTHINGに設定しても、同様に問題が発生します。既存のアプリケーションは正常に動作したかもしれませんが、現状では、障害が発生します。
Release: AllFusion Gen Runtime , GUI : 6.5 , 7.0
異常終了がモデルの不整合によるもの、または、GUI Runtimeの問題かどうかを判断するための診断ツールが提供されています。このツールは、NOTHINGステートメントに対して、SET <GUIObject>を使用し、不正にGUIObject属性ビューがリリースされた場合に、アプリケーションを実行し、診断モードでアクションダイアグラム図の問題を特定することができます。この診断ツールは、環境変数設定、または、単にPAD Traceツールを使用したアプリケーションを実行することで呼び出すことができます。診断モードの実行時は、すべての追加参照、リリースおよびGen OLE awareオブジェクトの削除は記録されます。すでに削除されたGUIObjectのリリースが要求された場合(つまり、ウィンドウ クローズで)、エラーダイアログが表示されます。Errorダイアログには、はじめにGUIObjectIDispatchの値を検索したアクション図ステートメントのイベントおよび行数とあわせて、リリースを要求するアクション図ステートメントのイベントおよび行数が記載されます。エラー メッセージには、これらのメッセージのほか、アプリケーションのPADトレースと合わせて、どのオブジェクトおよびステートメントが問題を引き起こしているかを特定するための、さらに詳細な情報も記載されています。環境変数設定は以下のとおりです。
IEFTRACEGUIOBJECTS=ERROR(またはPAD Traceで実行時)は、上記のエラーダイアログを提供します。
不正が検出された場合で、それが致命的なエラーでない場合、IEFTRACEGUIOBJECTS=WARNINGという追加警告ダイアログが表示されます。
IEFTRACEGUIOBJECTS=LOGはそれぞれのイベントを記録したログを提供します。このログの出力には、MicrosoftのVisual StudioのDebugウィンドウにログが書かれている状態で、Visual Studioの内部でアプリケーションを実行する必要があります。Visual Studioの内部でアプリケーションを起動させるために、msdev loadmodulename.exe trancodeとしてアプリケーションを実行してください。
アプリケーションの障害が発生する前に、IEFTRACEGUIOBJECTS=FIXは、致命的な「リリース」を行わないようにします。
警告:このログを取る方法は、コストがかかるプロセスですが、お客様側でアプリケーションをデバッグするのには適しています。
IEFTRACEGUIOBJECTS=FIXを使って実行することは、不適切なアクション図ロジックに対して意図されたプロダクション ソリューションではありません。本番環境でIEFTRACEGUIOBJECTSに値が設定された場合は、メモリ不足の重大な障害および安定したパフォーマンスが大幅に低下するという大きなリスクがあります。
以下の収集オブジェクト(CListColumnItem, CListItem, CListPermitted, CListRowItem,またはCMenu)のうちの1つであるIDispatchアドレスを含むGUIObjectビューを参照するエラーダイアログが表示された場合、ダイアログ メッセージ エラーは無視し、オプション ボタンの「NO」を選択する必要があります。
Old Japanese Knowledge document ID: JTEC001751
詳細につきましてはこちらをご覧ください。
CA Genのその他のFAQについては、以下のリンクからご確認ください。
CA Gen FAQ一覧表