2009-09-14 2 views
13

フォルダ内にいくつかのdllファイルとexeファイルを処理し、私が扱っているファイルの種類を判断する必要があります。.NET、COM、Win32またはその他のエイリアンライフフォーム。私は、DLLの種類を検出する最も簡単な方法を決定しようとしてきたどのようにしてDLLの種類を検出できますか? (COM、.NET、WIN32)

は、あなたはこのをどう思いますか:

  1. COMのDLL =>私がやるのLoadLibrary、その後のGetProcAddress "DllRegisterServer"の場合有効な戻り値を取得した場合は、COMファイルです。

  2. .NETのDLL => DLLはにMscoree.dllに依存している場合、それは常に.NETのDLLの?

  3. win32 dll =>上記の両方のテストに失敗した場合は、Win32のDLLですか?

確かに私たちが扱っているdllの種類を検出するには、より良い方法が必要です。上記は非常にclunkyで、EXEファイルでは動作しませんか?私が考えていない他の方法があるはずです。

理想的には、ファイルがコンパイルされたコンパイラと、MFC、Atl、Stlなどのどのような機能が使用されているかをパーサーが判断できるようにしたいと思っています...しかし、リフレクション時代?

答えて

1

私はそれを行うためのより良い方法が表示されません。しかし、2時には、実際には答えはノーです。ランタイムホストはほぼ確実にmscoree.dllに依存しますが、これらは必ずしも.Netアセンブリではありません。

.Net dllには、dumpbinを使用して見つけることができるCOM記述子があります。私はコードからこの情報を得る方法を知らない。

.NETでプログラミングする場合、アセンブリが.Netアセンブリであるかどうかを判断する方法の1つは、Assembly.LoadFrom(...)を呼び出すことです。

これは本当の答えではありませんが、私が調べることのヒントのセットです。

+0

こんにちは、ありがとう。私は前に "アセンブリをロードしようとする"アプローチを使用しましたが、それはひどく汚れているようですね?私はPEルートを下る必要があるように聞こえる。良い再利用可能なコンポーネントかもしれません。私は、これを行うためのライブラリに隠された機能があることを期待していましたが、そうは思いません。 –

+0

ええ、それはひどくclunkyと思われます... yyucckckk! :-) がんばろう! –

4

のDllRegisterServerは、COM DLLのためだけに必要なエクスポートがいるDllGetClassObject

関連する問題