自作DLLを作成時のエラーについて

解決


YUU2  2004-07-16 18:51:38  No: 114848

VC6.0で作成したDLLを
VB6.0のプロジェクトと同じパスに入れて、参照しているのですが、
VB6.0の起動によってエラーがでます。

1)VB6.0を起動後、ファイル-プロジェクトファイルを開くであるプロジェクトを開き、実行すると、かならずDLLファイルが見つからないというエラーがでます。

2)エクスプローラ等から、直接プロジェクトファイル(VBP)を起動し、実行するとエラーは、でないのですが、何回か実行停止を繰り返していると、DLLファイルが見つからないというエラーがでるときがあります。

Declare宣言時に、直接パスを指定すればいいと思うのですが、実行ファイル配布時に、パスが変更される場合があるので、できればやりたくありません。

このような場合どのようにするのが、よいのでしょうか?


魔界の仮面弁士  2004-07-16 19:19:37  No: 114849

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 が呼ばれているものかと。


YUU2  2004-07-16 19:34:59  No: 114850

>DLLをどこに配置していますか?
    1. 実行可能ファイル (.exe) を含むディレクトリ(App.Path)
なのですが。


魔界の仮面弁士  2004-07-16 20:21:02  No: 114851

先の逆質問は、
  「開発環境での実行時」は、何処にある物を利用させていますか?
という意味でお聞きしました。(分かり難くてすみません)

>     1. 実行可能ファイル (.exe) を含むディレクトリ(App.Path)
> なのですが。
それは「コンパイル後に、exeとして実行した時」の話ですよね。

VB6には、VC++などと違って、\bin\ に相当するフォルダが作られないため、
開発時には、「exeと同じフォルダ」という事はできないと思います。
(実行イメージは、一時ファイルとして作られますし)

先の回答の繰り返しになりますが、『Debug.Print CurDir()』で
カレントディレクトリを確認して、DLLの位置と違っているようであれば、
DLLの初回呼び出し前に、ChDir等で移動させるか、もしくは、
環境変数PATHに、そのDLLの位置を登録するなどの処置を取って見てください。


YUU2  2004-07-16 23:29:04  No: 114852

了解しました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加