0

混合 DLL (C++/CLI) を作成し、それをプレーンな ANSI C アプリケーションから正常に呼び出した後、C++ COM サーバーから (同じ C エントリ ポイントを使用して) 呼び出すことにしました。ただし、COM サーバーが正常に起動する前、または DLL を呼び出す前でも、ntdll.dll で「アクセス違反」が発生します。コール スタックには ntdll.dll!ExecuteHandler2 が複数回繰り返され、スタック オーバー フローが VS デバッグ出力で報告されます。混合モードの DLL と mscoree.dll が読み込まれていることがわかります。

混合 DLL を COM サーバーの遅延ロード DLL オプションに追加したところ、動作しているように見えます。

私が作成した C アプリケーションが遅延読み込みなしで正常に動作するように見えるのに、混合 DLL を C++ COM サーバーで遅延読み込みする必要があるのはなぜですか? この問題をデバッグするにはどうすればよいですか (これが予想される場合を除きますが、それについて何も見つかりませんでした)。

4

1 に答える 1

0

COM アパートメントを初期化する必要があるようです。COM アパートメントは、スレッドの同期を処理するために使用されます。

于 2012-05-14T10:15:32.267 に答える