none
DLLファイルから、DLLタイプ(非MFC、レギュラー、拡張)を判断することは可能ですか? RRS feed

  • 質問

  • DLLファイルから、そのDLLのタイプ(非MFC、レギュラー、拡張)を判断することは可能でしょうか?

    http://msdn.microsoft.com/ja-jp/library/1btd5ea3(v=VS.80).aspx にあるように、レギュラーDLLから拡張DLLをリンクする場合、初期化の呼び出しをDllMainから別関数に変更する必要があるようですが、既存DLLのタイプが分からず困っています。

    Dependency Walkerのxxを見ればよいとか、yyツールで調べられるなど、どんな情報でもよいので、知っている方がいましたら教えてください。

    ==引用==
    拡張 DLL を 1 つ以上のレギュラー DLL から使う予定がある場合、CDynLinkLibrary オブジェクトを作成する初期化関数をエクスポートする必要があります。初期化関数の呼び出しは、拡張 DLL を使う各レギュラー DLL から行います。初期化関数の呼び出しに適した場所は、拡張 DLL のエクスポート クラスまたはエクスポート関数を使う前の、レギュラー DLL の CWinApp 派生オブジェクトの InitInstance メンバ関数の中です。
    ==引用==

    以上、よろしくお願いします。

    2011年3月23日 6:36

回答

  • そのDLLを作った人に確認するのが一番確実ですが、それは難しいのでしょうか?

    >DLLファイルから、そのDLLのタイプ(非MFC、レギュラー、拡張)を判断することは可能でしょうか?
    MFCのLibraryとdynamic linkしている場合は、Dependency WalkerでMSVCRXX.dllか、MFCXXu.dllとLinkされていることが確認できます。
    MFCのLibraryとstatic linkしている場合は、Moduleの項目にMFCXXu.dllが有るか無いかで判断できそうです。
    あるDLLが他のDLLとLinkされており、その他のDLLがMFCのLibraryとLinkされているか確認する場合は、Link先のDLLも含め確認が必要です。
    レギュラーか拡張か判断する方法はわからないです。

    開発環境のVersionに依存することもあるため、参考程度に捉えてもらったほうが良いです。 

    >既存DLLのタイプが分からず困っています。
    状況を確認したいのですが、自分で作成しているDLLがどのタイプのDLLか分からない、ということでしょうか?
    それとも他人が作成したDLLががどのタイプのDLLか分からない、ということでしょうか?

    前者の場合、Projectの設定を開き「MFCの使用」を確認することで、MFCか否か判断できます。
    レギュラーか拡張か判断するには、「プリプロセッサの定義」に_AFXEXTが有るか無いかで判断できます。
    ある場合は、拡張DLLです。

    後者の場合、DLLを作った人に確認して下さい。
    拡張DLLだった場合、初期化用の関数を教えてもらう必要があります。
    この関数のフォーマットは作った人が自由に決められますから、作った人に聞かないとわからないです。

    • 回答としてマーク 山本春海 2011年4月6日 5:39
    2011年3月23日 9:06

すべての返信

  • そのDLLを作った人に確認するのが一番確実ですが、それは難しいのでしょうか?

    >DLLファイルから、そのDLLのタイプ(非MFC、レギュラー、拡張)を判断することは可能でしょうか?
    MFCのLibraryとdynamic linkしている場合は、Dependency WalkerでMSVCRXX.dllか、MFCXXu.dllとLinkされていることが確認できます。
    MFCのLibraryとstatic linkしている場合は、Moduleの項目にMFCXXu.dllが有るか無いかで判断できそうです。
    あるDLLが他のDLLとLinkされており、その他のDLLがMFCのLibraryとLinkされているか確認する場合は、Link先のDLLも含め確認が必要です。
    レギュラーか拡張か判断する方法はわからないです。

    開発環境のVersionに依存することもあるため、参考程度に捉えてもらったほうが良いです。 

    >既存DLLのタイプが分からず困っています。
    状況を確認したいのですが、自分で作成しているDLLがどのタイプのDLLか分からない、ということでしょうか?
    それとも他人が作成したDLLががどのタイプのDLLか分からない、ということでしょうか?

    前者の場合、Projectの設定を開き「MFCの使用」を確認することで、MFCか否か判断できます。
    レギュラーか拡張か判断するには、「プリプロセッサの定義」に_AFXEXTが有るか無いかで判断できます。
    ある場合は、拡張DLLです。

    後者の場合、DLLを作った人に確認して下さい。
    拡張DLLだった場合、初期化用の関数を教えてもらう必要があります。
    この関数のフォーマットは作った人が自由に決められますから、作った人に聞かないとわからないです。

    • 回答としてマーク 山本春海 2011年4月6日 5:39
    2011年3月23日 9:06
  • Kozzさん、回答ありがとうございます。

    やはり、レギュラーか拡張かは分からないのですね。

    Windows サービスにDLLで機能をプラグインする形になっており、関係者が沢山いるので一括で調べられたら便利だなと考えたのですが、難しいことを理解しました。

    それぞれの拡張DLL作成者に、確認します。

    では。

    2011年3月25日 7:48
  • こんにちは、nnishihara さん。

    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。

    kozz さんからの情報が参考になったようでしたので、勝手ながら私のほうで回答としてマークさせていただきました。
    kozz さん、情報ありがとうございます。

    いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたしますね。

    今後とも、MSDN フォーラムをよろしくお願いいたします。それでは。
                                                                                                                             
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2011年4月6日 5:42