アプリケーションの作成→インストール→実行を行いましたが、
以下の理由により、起動しません。
実行時エラー'49'
Active X コンポーネントはオブジェクトを作成できません
実行時エラー '53'
ファイルが見つかりません
原因と対策について、ご教授ください。
<経緯>
1. VB6にて、アプケーションAを作成
2. VB6にて、Aからコールされる関数を含むDLL Bを作成
3. DLL Bをregsvr32 コマンドでレジストリへ登録。
4. Aの実行(DLL定義の関数のコール)を確認。
5. ディストリビューションウィザードを使用して、アプリケーションAの
プロジェクトを指定して、setup.exeを作成。
この時、ファイル追加指定にて、「DLL B」を指定。
6. 作成したセットアップファイル一式を別環境(別のPC)へコピー
7. インストールを実施。
→インストールは成功しました。
8. スタートメニュー→プログラム→アプリケーションAを起動。
→エラー発生により、アプリケーション起動せず。
regsvr32を手作業にて実行し、DLL Bを登録した後は、
実行時エラー '53'
とのエラーとなります。
この時、ファイル追加指定にて、「DLL B」を指定。
この部分ですが、フルパスで指定していませんか?
または、DLL B が 実行形式ファイルとは別の、PATHが通っていないディレクトリにインストールするような設定になっていませんか?
アドレスはダミーです。http://www.hatena.ne.jp/
DLLは EXEと同じところに 置いてみたらいかがでしょうか?
また、そのDLLから参照しているDLL等は ありませんでしょうか?
回答有難うございます。
>>DLLは EXEと同じところに 置いてみたらいかがでしょうか?
開発環境での話しですか?インストール先での話しですか?
>>また、そのDLLから参照しているDLL等は ありませんでしょうか?
そのDLLとはDLL Bのことでしょうか?
参照しているDLLとは、どのように調査すればよいですか?
どこかにパスが記載されているのでしょうか?
#1 で回答した者です。
DLL B については、ディストリビューションウィザードのセットアップ先で $(AppPath) になっているかどうか確認してください――ということを言いたかったのですが‥‥開発者向けマニュアルで、ディストリビューションウィザードについて読み込んでください。また、インストーラー全般に関して学んでください。
回答有難うございます。
DLL Bのセットアップ先のフォルダ指定は、
$(WinSysPath)、$(AppPath) いずれも試行しましたが、
ダメでした。
>開発環境での話しですか?インストール先での話しですか?
エラーが出てるのは、どこでしょうか?
>>>また、そのDLLから参照しているDLL等は ありませんでしょうか?
>そのDLLとはDLL Bのことでしょうか?
>参照しているDLLとは、どのように調査すればよいですか?
>どこかにパスが記載されているのでしょうか?
DLL Bです。
DLL Bは、どのように作っているのでしょうか?
あと、DLL BのバージョンとアプケーションAで記憶されているバージョンが違う恐れがあります。
DLL Bを 再度 作り直して その作り直した DLL Bを用いてアプケーションAを作ってみたらいかがでしょうか?
インストールしなおすときは、DLL Bをきちんと regsvr32 /u で 解除してからにしましょう。
まず、
・「DLL B」はActiveX DLLである
・「アプリケーションA」には「DLL B」の参照設定を追加していない。
・「アプリケーションA」から「DLL B」をコールするときCreateObjectを使用している。
という前提でよろしいでしょうか?
上記の前提であれば、手順に大きく間違ったところはないと思います。
----
ところでService Packは最新でしょうか?
VB6のメニュー「ヘルプ」→「バージョン情報」で確認してください
Microsoft Visual Basic 6.0(SP6)
などと表示されているはずです。カッコ内がService Packの番号です。
最新はService Pack6のようです。
----
Service Pack6がインストールされた状態で、
以下の手順を試してください。
1. VB6にて「DLL B」の実行ファイルを作成する
→VBメニューの「ファイル」→「XXX.DLLの作成...」
2. VB6にて「アプケーションA」の実行ファイルを作成する
→同上
3.「アプケーションA」のプロジェクトフォルダから「?????.PDM」を削除する
→Service Pack6適用前のファイルなので、今回に限り削除。
4. ディストリビューションウィザードを使用して、
「アプリケーションA」のセットアップパッケージを作成する
→途中、ファイル追加指定にて「DLL B」を指定。
5. 作成したセットアップファイル一式を別環境(別のPC)へコピー
6. インストールを実施。
7. スタートメニュー→プログラム→「アプリケーションA」を起動。
*開発PC上でregsvr32を実行する必要はありません。
→上記手順1で自動的に登録されます。
*インストール先でregsvr32を実行する必要はありません。
→インストーラがやってくれます
→アンインストーラがregsvr32の登録解除も実行してくれます。
回答有難うございます。
・「DLL B」はActiveX DLLである
→はい。
・「アプリケーションA」には「DLL B」の参照設定を追加していない。
→はい。但し、regsvr32 でファイルを指定して登録していいます。
regsvr32 /uすると、アプリケーションは起動しなくなります。
・「アプリケーションA」から「DLL B」をコールするときCreateObjectを使用している。
→はい。以前、教授して頂いた通りです。
SP6はインストールしておりませんでしので、
バージョンアップしました。
ご指摘頂いた手順により、setup.exeの作成・インストールを
実施しましたがセットアップ先で、起動しませんでした。
DLL Bのセットアップ先のフォルダ指定は、
$(WinSysPath)、$(AppPath) いずれも試行しましたが、
ダメでした。
なお、現在のエラーは、
「実行時エラ'53' ファイルが見つかりません」
ですので、DLL Bが参照出来ないためのエラーでは無いようです。
う~ん、解決しませんでしたか、申し訳ない。
手順はあっているはずです。。。
Service Packついては、
ディストリビューションウィザードがかなり改修されている(と記憶している)のでService Packはインストールしておいて損はないでしょう。
----
ふと気になったのですが、状況は「起動しない」なのですね。
アプリケーションAにおいて、DLL Bが利用されるタイミングはどうなっているのでしょう。
・Sub MainでCreateObjectを使っている?
・初期に表示されるフォームのForm_loadでCreateObjectを使っている?
上記どちらでもないとすると、とりあえず起動するはずなんですが。
----
CreateObjectを使う箇所をフォームボタンクリックなどに記述を移して、
その場所でエラーが発生しているかを確かめてみましょう。
----
変化球で、
前回の質問にあったDeclare Function宣言が残ったままで、それが邪魔しているとか。
アプリケーションAにも、DLL BにもDeclare Functionは無いですよね。。
回答有難うございます。
SPについては、そうですね。
(SP5までしか入っていませんでした。よくお気づきで。。)
>> ふと気になったのですが、状況は「起動しない」なのですね。
>>・初期に表示されるフォームのForm_loadでCreateObjectを使っている?
ご指摘のとおりです。
初期表示のFormから、CreateObjectの記述をコメントしてみましたが、
状況は変わりませんでした。
「実行時エラ'53' ファイルが見つかりません」
とのエラーが出ております。
DLL Bで無く、他のDLLが見えていないのではないかと推測しております。
>>アプリケーションAにも、DLL BにもDeclare Functionは無いですよね。。
確認したところ、有りませんでした。
お手数ですが、他に確認する点があるようでしたら、
ご指摘をお願いします。
環境についての記述が足りませんでしたね。
開発環境:Win2000SP4 / VisualBasic6.0SP6
インストール先環境:Win2000SP4 / VisualBasic6.0SP4がインストールされいます。
回答有難うございます。
>> この部分ですが、フルパスで指定していませんか?
フルパスでないとは、カレントとするのでしょうか?その指定をどこで行うのでしょうか?
>>または、DLL B が 実行形式ファイルとは別の、PATHが通っていないディレクトリにインストールするような設定になっていませんか?
よくわかりません。どういう意味でしょうか?