- PR -

Dllのインスタンス取得について

1
投稿者投稿内容
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2009-03-09 08:00
いつもお世話になってます。

レギュラーDllを使っていて、それをあるEXEファイルから呼び出しています。
このDLLの中でそれ自身のインスタンスを取得したいときにはどのようにすればいいのでしょうか?

たとえば、GetModuleHandle("そのDLL自身の名前")にてインスタンスを取得できますが、
もともと自身のファイルであるため、名前をあげなくても呼び出し方があるのではないかと考えています。

そのような方法はありますでしょうか?

よろしくおねがいします。
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2009-03-09 10:01
単純に、DllMain の引数をグローバル変数に保存しとく。
というのはどうでしょう。
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2009-03-09 13:54
拡張DLLの場合、DLLMAINがあるのですが、
通常のレギュラーDLLの場合、それがありません。

そのため、最初のインスタンスを手動でとってくる必要があると思うのです。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2009-03-09 15:27
こんにちは。

引用:

buttheadさんの書き込み (2009-03-09 13:54) より:
通常のレギュラーDLLの場合、それがありません。



MFCを利用しているレギュラーDLLであれば、DllMainはすでに存在しています。
レギュラー DLL の初期化(msdn)
この場合は、
AfxGetInstanceHandle(msdn)
もしくは
CWinApp::m_hInstance(msdn)
で、DLLのハンドルを取得できます。

非MFCの場合は
DllMain(msdn)を作成してください。
非 MFC DLL の初期化(msdn)

(参考まで)
Visual C++ リンカ オプション /ENTRY (エントリ ポイント シンボル)(msdn)
VC++のDLLは通常(デフォルトで)、_DllMainCRTStartupがエントリポイントになっており、そこからDllMainが呼び出されるようになっております。
butthead
大ベテラン
会議室デビュー日: 2004/01/14
投稿数: 162
投稿日時: 2009-03-10 07:03
どんぴしゃな答えありがとうございます。

できました。
initinstanceにて初期化する必要があったんですね。
1

スキルアップ/キャリアアップ(JOB@IT)