あなたが働いている環境を明確にできますか?今のところ、モジュールハンドルの取得についてはすでに説明したので、C ++を使用していて、いくつかのWin32関数(GetModuleHandle、LoadLibraryなど)の1つを呼び出していると仮定します。
まず第一に、私はあまりにも広い文脈でOOの原則を適用することに注意したいと思います。オブジェクト指向パラダイムは、ソフトウェアをより保守可能で理解しやすい方法で構造化するのに役立ちます。説明している問題は、アプリケーションの境界の外にまで及ぶ可能性があるように聞こえます。DLLなどの別のリソースに関する情報を取得する場合は、標準的なアプローチを使用してこれを実現し、コードが検査する必要のある項目から確実に分離されるようにすることを検討する必要があります。
DLLに関数を導入してバージョン番号をメインアプリケーションに返す場合、メインアプリケーションとそのバージョン情報を提供する必要のあるDLLとの間に緊密な結合が作成されます(基本的に、このための特注のAPIまたはインターフェイスを定義します)。 。
代わりに、プラットフォーム全体の標準機能を使用して情報を取得することを検討する必要があります。これにより、アプリケーションは、ハンドルを取得できるDLLをバージョン管理できるようになります。
dllのHMODULEがある(そしてC ++を使用している)と仮定して、次の関数を呼び出してバージョンを取得します...
GetModuleFileNameEx(これをまだ知らない場合にDLLのフルパスとファイル名を取得するため)
http://msdn.microsoft.com/en-us/library/windows/desktop/ms683198(v=vs.85)。 aspx
このファイル名を使用して、
GetFileVersionInfoSize(MSDNでこれらを検索してください)
これにより、ファイルのバージョンメタデータに関するいくつかの重要な情報(ファイルに含まれている場合はどのくらいの情報)がわかります。この関数が成功したと仮定して、
GetFileVersionInfo
これにより、すべてのファイル情報メタデータがバッファに読み込まれ、
VerQueryValue
lpSubBlockパラメーターとして「\」を指定して、標準のファイル情報メタデータ(バージョン番号を含む)を取得します
上記の関数を使用すると、コードを記述して、コードがハンドルを取得できる任意のモジュールのバージョン番号を取得できます。
もちろん、C#を使用している場合、解決策ははるかに簡単です。お役に立てれば...