0

Excel用のDelphiプラグインに取り組んでいます。また、AddIn Express COM ライブラリ (素晴らしいところで) も使用します。コードは正常に機能していました。新しいフォームを呼び出す別のリボン メニュー オプションを追加しました。このフォームには REST コントロール (Client、Response など) があります。コンポーネントは互いに関連付けられていますが、URL に関する情報はありません。これは実行時に設定されます。プロジェクトをコンパイルします。

  • スタンドアロン (デバッガーの外部) で実行すると、問題なく動作します。URL リソースの設定、REST サービスの呼び出し、メモへのデータの表示を行います。
  • Delphi 内から実行すると、すぐにアセンブリ コードにダンプされ、イベント ログにエラー メッセージが記録されます。

    「OS ローダー ロック内でマネージド実行を試みています。アプリケーションがハングする可能性があるため、DllMain またはイメージ開始関数内でマネージ コードを実行しようとしないでください。」

以前は問題なく動作していましたが、フォームを追加しました (具体的には、REST コンポーネント、RestAdapter、TDatasource、および ClientDataSet を含む親フォームを追加し、それから継承しました)。Google では、これはデバッガーの問題であり、(少なくとも Visual Studio では) Exceptions / Ignore Loader Lock を介してオフにできるようです。Delphi (Seattle) デバッガー内で同様の機能を見つけることができません。

AddIn Express を問題なく実行し、プラグインを問題なく実行し、スタンドアロン REST デモ アプリを問題なく実行しました。組み合わせがこの問題を引き起こしている可能性はありますか? ローダーロックのデバッガーチェックを無効にする方法はありますか? それが役立つ場合、イベント ログの「OS Loader Lock」メッセージの前の最後のメッセージは、モジュール: CSCAPI.dll がロードされたことを示しています。REST コンポーネントを動的に作成する必要があるかどうか疑問に思っています。私の疑いでは、これらのコンポーネントはアプリ (別名、私のプラグインを使用した Excel) の起動時に作成され、デバッガーを混乱させるような方法で何かが初期化されているということです...

4

2 に答える 2

0

可能性のある説明は、initializationユニットの 1 つのコードが原因であるということです。このコードはDllMain関数から呼び出されます。から管理された実行を試みることDllMainは、実際に問題を引き起こしています。

私の AddInExpress モジュールでは、すべてのinitializationセクションが空です。初期化は別の場所で実行されます。熟考するのはイライラするように思えるかもしれませんが、リモートで複雑なことを実際に行ってはなりませんDllMain.

initializationどのセクションが責任があるかがわかるまで、次のステップとしてコードを削除することをお勧めします。使用する Embarcadero REST コンポーネントなどの Embarcadero ライブラリ コードであっても、プロジェクト内の任意のユニットが責任を負う可能性があることに注意してください。それがあなたの出発点です。解決策については、問題を特定したらよく考えてください。

于 2016-09-05T16:46:24.120 に答える
0

私はついに何が起こっていたのかを解決しました。別の Excel プラグインを購入してインストールしました。それが私の問題の原因でした。どうやら、私の問題を引き起こしていた初期化ルーチン内でコードを使用しているようです。そのプラグインを非アクティブに設定すると、コードは正常に動作します。REST コンポーネントの問題ではありませんでした。

于 2016-09-07T11:34:10.130 に答える