現在のアプリケーションは、複数のページを含む単一のOpenGLEXEです。EXEは、UDPを介してネットワーク経由で送信されるデータにアクセスする責任があります。データを蓄積し、多数のシングルトン構造に格納します。EXE内の個々のページは、シングルトン構造にアクセスして、適切と思われるデータを処理します。
EXEのフットプリントを軽減し、構成管理の試みをサポートするために、EXEがロードする単一のDLLにページを分割することにしました。EXEを、DLLのページがロードされるシェルにすることが私たちの意図です。EXEには、引き続きすべての通信責任(UDP、Corba、ユーザーなど)があります。ページは、それが何をしているのかを表示する責任があります。
問題は(最終的に)次のようになります。EXEから収集されたこの無数のデータを、消費しているDLLベースのページに渡すにはどうすればよいですか。私たちが使用するシングルトン(ACE_Singleton)はこのレベルの方向を許可しないため、シングルトンの概念はもはや水を保持しません。シングルトンをDLLから消費するEXEに一日中エクスポートできますが、その逆はまだわかりません。私は次のオプションを考え出しました-どれも好きではないので、誰かがもっと良いものを持っていることを望んでいました:)
- 現在別々のシングルトンに格納されているすべてのデータを、「真の」シングルトンをエクスポートする別のDLLにまとめます。例えば。DLLからエクスポートされたシングルトンは、EXEがロードしたものに関係なく、共有メモリのようなものです。これは興味深い選択ですが、展開シナリオで問題が発生する可能性があります。人々が本当にこの考えに夢中になっているなら、私はそれらの問題について詳しく説明することができます。
- 関連するすべてのデータを含む静的DLLレベルの構造を作成します。EXEは、DLLのロード時にこのデータをDLLにプッシュダウンし、DLL内に含まれるページがデータにアクセスできるようにします。これは、アプリケーションのすべてのページを編集する必要がある場合でも、100を超える最も簡単な解決策のようです。また、少しずさんなようです。すべてのデータはグローバルにあります。あまりセクシーでもC++yでもありません。
それで、他の誰かがこの問題の解決策を持っていますか?
このアプリケーションは、WindowsXPで使用するためにVisualC ++ 9.0(VisualStudio 2008)を使用して作成されています。何らかの理由で、Vistaは、お客様が使用しているにもかかわらず、ラボではまだサポートされていません。