トップ回答者
二重起動

質問
回答
-
>> 1.
>> デバッカーでファイル読み込みのActiveXアプリを起動してます。
>> ここで、アプリがアドインしているIEを閉じます。
>> そして、再度、IEタスクが無いの確認してアプリを起動すると二重起動になります。
>> これも開放されていないオブジェクトがあると言うことですか?んー・・・VB6のアプリからIEを起動しているのか、IEのアドオンをVB6で作っているのかいまいちよく分かりませんが・・・
まぁデバッガで起動できるということですので、前者だと仮定して回答します。
まず、IEのタスクが終了しているのはどこで確認されたのでしょうか?
タスクバーから消えている・タスクマネージャのアプリケーションタブに無い、では終了は確認できません。
タスクマネージャのプロセスタブに「iexplore.exe」が無いか確認して下さい。
(ただまぁIEのプロセスは関係無いと思いますが・・・)>> デバッカーを終了して、再度、立ち上げるて、IEタスクが無いの確認してアプリを起動するとエラーは起こりません。
デバッガを終了するとデバッガがホストしていたプロセスが終了=強制解放されますので、当然二重起動にはなりません。
>> 2.
>> オブジェクトのクロースはSETで指定して、Nothingを代入すれば良いのでしょうか?
>> まとめてオブジェクトをクロースするステーメントはございますか?とりあえず下記にVB6での代表的なファイル操作処理のサンプルを書いてみました。
Private Sub Command1_Click() Dim fileNo As Integer fileNo = FreeFile 'ファイルOpen Open "C:\WUTemp\Sample.txt" For Input As #fileNo '(※読み込み処理) 'Close処理 Close #fileNo End Sub Private Sub Command2_Click() Dim fileSys As New FileSystemObject 'ファイルOpen Dim stream As TextStream Set stream = fileSys.OpenTextFile("C:\WUTemp\Sample.txt", ForReading, False) '(※読み込み処理) 'Close処理 stream.Close Set stream = Nothing Set fileSys = Nothing End Sub
どちらの方法でファイル操作を行っているのかわかりませんが、ご自分で書かれた部分と見比べて、Close処理がちゃんと入っているか確認してみて下さい。- 回答としてマーク Umashika 2012年11月14日 6:31
すべての返信
-
申し訳ございません。
質問させてください。1.
デバッカーでファイル読み込みのActiveXアプリを起動してます。
ここで、アプリがアドインしているIEを閉じます。
そして、再度、IEタスクが無いの確認してアプリを起動すると二重起動になります。
これも開放されていないオブジェクトがあると言うことですか?
デバッカーを終了して、再度、立ち上げるて、IEタスクが無いの確認してアプリを起動するとエラーは起こりません。2.
オブジェクトのクロースはSETで指定して、Nothingを代入すれば良いのでしょうか?
まとめてオブジェクトをクロースするステーメントはございますか? -
>> 1.
>> デバッカーでファイル読み込みのActiveXアプリを起動してます。
>> ここで、アプリがアドインしているIEを閉じます。
>> そして、再度、IEタスクが無いの確認してアプリを起動すると二重起動になります。
>> これも開放されていないオブジェクトがあると言うことですか?んー・・・VB6のアプリからIEを起動しているのか、IEのアドオンをVB6で作っているのかいまいちよく分かりませんが・・・
まぁデバッガで起動できるということですので、前者だと仮定して回答します。
まず、IEのタスクが終了しているのはどこで確認されたのでしょうか?
タスクバーから消えている・タスクマネージャのアプリケーションタブに無い、では終了は確認できません。
タスクマネージャのプロセスタブに「iexplore.exe」が無いか確認して下さい。
(ただまぁIEのプロセスは関係無いと思いますが・・・)>> デバッカーを終了して、再度、立ち上げるて、IEタスクが無いの確認してアプリを起動するとエラーは起こりません。
デバッガを終了するとデバッガがホストしていたプロセスが終了=強制解放されますので、当然二重起動にはなりません。
>> 2.
>> オブジェクトのクロースはSETで指定して、Nothingを代入すれば良いのでしょうか?
>> まとめてオブジェクトをクロースするステーメントはございますか?とりあえず下記にVB6での代表的なファイル操作処理のサンプルを書いてみました。
Private Sub Command1_Click() Dim fileNo As Integer fileNo = FreeFile 'ファイルOpen Open "C:\WUTemp\Sample.txt" For Input As #fileNo '(※読み込み処理) 'Close処理 Close #fileNo End Sub Private Sub Command2_Click() Dim fileSys As New FileSystemObject 'ファイルOpen Dim stream As TextStream Set stream = fileSys.OpenTextFile("C:\WUTemp\Sample.txt", ForReading, False) '(※読み込み処理) 'Close処理 stream.Close Set stream = Nothing Set fileSys = Nothing End Sub
どちらの方法でファイル操作を行っているのかわかりませんが、ご自分で書かれた部分と見比べて、Close処理がちゃんと入っているか確認してみて下さい。- 回答としてマーク Umashika 2012年11月14日 6:31
-
VB6 の ActiveX EXE というと、アウトプロセス COM という認識で合っていますか。
それを、IE などでオブジェクトを呼び出しているのでしょうか。Excel などもアウトプロセス COM ですが、きちんとオブジェクトを解放しないとプロセスが残るという問題が有名です。
今回の VB6 の ActiveX EXE もタスクマネージャーのプロセスタブを見ると、生き残っているのではないでしょうか。生き残っているとすれば、解放処理が必要です。
どのような ActiveX EXE を作っているか、どのように利用しているかが見えないので、具体的なことは何とも言えませんが。- 編集済み AzuleanMVP, Moderator 2012年11月16日 23:11