DLL として利用できるトレース ライブラリを作成しています。システム内の基本的にすべてのコンポーネントで消費されます。注意が必要な要件の 1 つは、トレース関数をプロセスの有効期間の非常に早い段階 (main() が実行される前であっても) に呼び出す必要があることです。
このライブラリのコンシューマーには、実行可能ファイル、静的にリンクされた DLL、遅延ロードされた DLL、および動的にロードされた DLL が含まれます。すべてのバリエーション。
一部のトレース機能は、静的初期化ではうまく機能しませんが、他の機能は問題ありません。理想的には、初期化時に最小限の安全な機能を消費者に提供し、初期化が完了した後に完全な機能を提供できるようにしたいと考えています。
特定のコンシューマーは DLL 自体であり、それらをホストする実行可能ファイルを制御できないため、コンシューマーに明示的な "I'm done init" 呼び出しを行うように依頼しても機能しません。同じ問題がチェーンを 1 レベル上に移動するだけです。
私が望んでいるのは、現在静的初期化で実行しているかどうか、またはその段階が完了しているかどうかをランタイムに問い合わせる方法があることです。そのようなことは可能ですか?
さらに複雑なことに、5 つのプラットフォームで実行する必要があります。一度だけのソリューションは必要ありませんが、すべてのプラットフォームで何らかの形で機能させる必要があります。