プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
現在、WindowsXP(SP2)、VisualBasic6.0(SP6)を使って開発中です。

他社が作成したソースを解析しているのですが、分からない事があったので教えてください。

hModule = LoadLibrary(strDLLFullPath)

として、strDLLFullPathに指定されているDLLを呼び出しているのですが、VBでデバッグしていると、【返り値(hModule)=0】となっています。
ロードに成功すると、アドレス空間に割り振ったDLLのインスタンスハンドルが返って来る筈だから、【0】が帰って来たという事は、ロード出来てないという事ですよね?

しかしこのソースをコンパイルして単体のアプリとして動かすと、きちんとハンドルを取得できるのです。

動作環境は同じなのに、なぜこのような違いが生じるのでしょうか?
何か御存知でしたら教えてください。
宜しくお願いします。

A 回答 (2件)

エラー番号(Err.LastDLLError)は確認しましたか?



> hModule = LoadLibrary(strDLLFullPath)
「strDLLFullPath」の具体的な内容は?

そのDLLって、別のDLLを使っていたりしませんか?
だとすると、EXE/DLL/別のDLL/プロジェクトファイルの位置関係(各々どこのフォルダ)は?
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

>そのDLLって、別のDLLを使っていたりしませんか?

御指摘の通り、別のDLLを呼んでいました。
別のDLLも指定したパスに置いたら、解決しました。
ありがとうございました。

お礼日時:2006/12/05 10:52

その読み込もうとしている DLLなどの DllMainで呼び出しもとのモジュールを判定しているのかもしれません


DLLの利用を限定しているなど制限があるのではないでしょうか
# 憶測ですけどDLLを開発に使うためには許可が要るなど...
# 開発元または 提供元に確認なさってみてはいかがでしょう
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございます。

使いたいDLLは、開発元からの許可は取っています。
実行アプリにすると使えるので、実行アプリとソースでは、LoadLibraryの動作が異なるのかと思いましたが、単に自分のミスで、動作環境の違いでした。
申し訳ありませんでした。

お礼日時:2006/12/05 10:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!