VC6.0で作成したDLLを
VB6.0のプロジェクトと同じパスに入れて、参照しているのですが、
VB6.0の起動によってエラーがでます。
1)VB6.0を起動後、ファイル-プロジェクトファイルを開くであるプロジェクトを開き、実行すると、かならずDLLファイルが見つからないというエラーがでます。
2)エクスプローラ等から、直接プロジェクトファイル(VBP)を起動し、実行するとエラーは、でないのですが、何回か実行停止を繰り返していると、DLLファイルが見つからないというエラーがでるときがあります。
Declare宣言時に、直接パスを指定すればいいと思うのですが、実行ファイル配布時に、パスが変更される場合があるので、できればやりたくありません。
このような場合どのようにするのが、よいのでしょうか?
DLLをどこに配置していますか?
Declareに相対パスで指定した場合、そのパスは
1. 実行可能ファイル (.exe) を含むディレクトリ(App.Path)
2. カレント ディレクトリ
3. Windows のシステム ディレクトリ
(\WINNT\system32、\Windows\System)
4. Windows のディレクトリ (\WINNT、\Windows)
5. 環境変数 PATH に設定されているディレクトリ
の順で検索されます。
環境変数PATHに、そのDLLの位置を登録するか、
DLLの配置先を、3か4の位置に変更してみてください。
あるいは、DLLの初回呼び出し前に、「カレントドライブ」と
「カレントディレクトリ」をDLLのあるフォルダに変更しておくとか。
# あるいは、LoadLibrary という手もありますが…VBでは一般的ではないかも。
> ファイル-プロジェクトファイルを開くであるプロジェクトを開き、
この場合、上記 2 のパスが使われたと思います。おそらく、VB6.EXE のある
C:\Program Files\Microsoft Visual Studio\VB98\ あたりでしょうね。
> 直接プロジェクトファイル(VBP)を起動し、実行すると
この場合も、2 のパスが使われたと思います。この場合は
vbp ファイルのあるフォルダにある DLL が呼ばれているものかと。
>DLLをどこに配置していますか?
1. 実行可能ファイル (.exe) を含むディレクトリ(App.Path)
なのですが。
先の逆質問は、
「開発環境での実行時」は、何処にある物を利用させていますか?
という意味でお聞きしました。(分かり難くてすみません)
> 1. 実行可能ファイル (.exe) を含むディレクトリ(App.Path)
> なのですが。
それは「コンパイル後に、exeとして実行した時」の話ですよね。
VB6には、VC++などと違って、\bin\ に相当するフォルダが作られないため、
開発時には、「exeと同じフォルダ」という事はできないと思います。
(実行イメージは、一時ファイルとして作られますし)
先の回答の繰り返しになりますが、『Debug.Print CurDir()』で
カレントディレクトリを確認して、DLLの位置と違っているようであれば、
DLLの初回呼び出し前に、ChDir等で移動させるか、もしくは、
環境変数PATHに、そのDLLの位置を登録するなどの処置を取って見てください。
了解しました。
ツイート | ![]() |