2009-07-18 1 views
2

Delphi 5 IDE(オフィスアプリケーションをホストとして使用)からCOM Officeアドインを実行すると、ブレークポイントは正常に動作します(リモートデバッグシンボルと適切に設定された出力フォルダを使用する場合)。私のコードで非デルファイの例外(アクセス違反のような)の中で、IDEがその時点で中断するようになります。代わりに、IDEは外部のsafecallメソッドのtry ... exceptラッパーを手動で再起動すると停止します。DelphiのアドインDLLでDebugHookが1に設定されていないのはなぜですか?

何らかの理由でDebugHookグローバルが0に設定されていることがわかりました。私が知っている限り、IDE内から実行するときは常に1に設定する必要があります。さらに、私のDLLの初期化中に手動で1に設定すると、実際に問題が修正されました。私の実験的な(read:crappy)コードが例外をトリガする行でIDEがきれいに停止します。

質問は次のとおりです。なぜですか?手動でこれを行う必要があるのはなぜですか? IDEがこれを私のために設定するべきではありませんか?私はこの行動を誘発する重要な重要な設定を忘れましたか?

答えて

3

DelphiエバリュエーターがDebugHookグローバルをルックアップできない場合、その値を設定できません。 IDEからDLLをコンパイル/実行し、DLLを呼び出す予定のOfficeアプリケーションに[実行|パラメータ]ダイアログボックスの "ホストアプリケーション"を設定してください。評価者がリモートデバッグシンボルをどのように使用するかは、バグである可能性があります。

+0

提案していただきありがとうございますが、それは私がすでにやっていることです(開発のための他の賢明な設定がありますか?しかし、リモートデバッグシンボルの検索には、Delphi 5では問題があります(XP以降では、IDEの現在のディレクトリを出力フォルダに設定する必要があります。そうしないと、シンボルをモジュールダイアログから手動で再ロードする必要があります)。あなたは何かに乗っているかもしれません。再度、感謝します! –

2

最近のバージョンのDelphiには、のデバッグの下に「デバッグされたプロセスをデバッグする」というなどのオプションがあります。そのオプションはDelphi5にありますか?それは設定されていますか?

あなたが説明する動作に遭遇していないため、これが役立つかどうかは不明です。

+3

私はそう思わないと思いますが、あなたの答えは、(Officeアプリケーションをホストとして設定するのではなく)「プロセスにアタッチ」し、_did_がDebugHookを1にするように促しました。私の現在の速いハックとしてコードから手動で設定するが、面白い! –

+0

@ Paul-Jan:あなたが良い答えがある場合は、それを投稿して投稿してください。いくつかの担当者を獲得することができます.SOのポイントは、高品質の質問と回答の検索可能なリポジトリを生成することです。あなたの解決策は他の人にとって役に立つかもしれません... – Argalatyr