.exeファイルでエラーを出ないようにするには?

解決


ほのか  2004-08-28 09:09:47  No: 85302

VB6.0で統合環境上の「開始」では実行できるのですが、.exeファイルを作成して実行するとアプリケーションエラーが出ます。

再度インストールした方がよろしいでしょうか?


やれ2  2004-08-29 00:59:39  No: 85303

VBでアプリを作りましたがエラーがでて動きません。
どうしたらエラーがでなくなりますか?

という質問を聞いてあなたは回答できますか?

エラーが出ないように直して下さいぐらいしか回答のしようがありません。


Say  2004-08-29 05:27:10  No: 85304

根本的な解決ではありませんが、
Pコードコンパイルするととりあえず動くことがあります。


ねろ  2004-08-29 07:49:34  No: 85305

メモリー関係のエラーだと思われますがこの問題はかなり厄介です。
最悪の場合クリーンインストールまで必要になります。
まず最新のSPは当たっていますか。


ほのか  2004-08-29 16:58:56  No: 85306

やれ2様>すみません。他の方からダウンードしたソースだったので・・他人のせいにする気がして・・・
実は、http://www.vector.co.jp/soft/dl/win95/personal/se246014.htmlをダウンロードして、自分の環境でexeを再度作るとアプリケーションエラーになりました

Say様>なんと!!Pコードコンパイルで動きました。^o^
これって・・・根本的解決?でいいのでしょうか?

ねろ様>1度Visual Studioを再インストールして、SP6を当てました。
別スレで上げましたが、SP6を当てる途中で、msvcp60.dllを開くことができません・・とか出て、「無視」を選択してインストールしていますが・・
これがまずいのかな?と思っていますが・・いかがでしょうか?


Say  2004-08-29 19:12:21  No: 85307

根本的解決というわけではありませんが・・・。

じつのところ、Pコードコンパイルとネイティブコードコンパイルには
動作上若干の差異があり、100%互換性ではありません。
(まあ、もともとVBはPASCALと同じPコード言語で、
ネイティブコードコンパイルはあとでとってつけた
機能ですから仕方ないのかもしれませんが。
文法もMODULAあたりを参考に設計してるし。)

統合環境での実行エンジンはPコードインタプリタですから
統合環境で動いてネイティブコードコンパイルで動かない場合、
Pコードコンパイルで動く可能性があるわけです。
ただし、実行速度は若干遅くなります。


ねろ  2004-08-29 20:57:55  No: 85308

>msvcp60.dllを開くことができません
立ち上がっている全てのプログラムを終了させて
もう一度やってみたらいかがでしょうか。


ほのか  2004-08-30 00:14:00  No: 85309

ねろ様>msvcp60.dllを消そうとしても消せなかったのでWindows2000をセルフモードで起動してリネームし、再度通常モードで立ち上げてVisual Studio6.0のSP6を当てたところ、新たなmsvcp60.dllができて最新バージョンになったようです。

ただ・・上記にしても相変らずネイティブコードコンパイルではアプリケーションエラーで動きませんでした。T.T


ねろ  2004-08-30 07:04:36  No: 85310

まず基本的な事ですけど、開発環境をインストールしたり
サービスパックを当てる時は起動している全てのプログラムを
停止します。NortonAntivirusも例外では有りません。
SP6がうまく当たらなかったのは、単にNortonAntivirusが
msvcp60.dllを使っていたからでしょう。
従ってプログラムを実行時エラーが出る問題とは無関係だと思います。

では何が原因かというと
timeSetEventの関数は、MSDNによると
>The timeSetEvent function starts a specified timer event.
>The multimedia timer runs in its own thread. 
>After the event is activated, it calls the specified 
>callback function or sets or pulses the specified event object.
となっていますね、これはmultimedia timerが別スレッドで起動して
コールバックファンクションを呼び出すとなっています。
つまりマルチスレッドなんですね。なぜそうなったかは判りませんが、
VB6よりネイティブコードコンパイルではマルチスレッドは使えなくなったようです。
つまり誰がやってもこのコードはネイティブコードコンパイルではエラーになると思います。
ネイティブコードコンパイルでコンパイルするか、VB6以前のVBでコンパイルするか、
あきらめて違うコードを書くか、そんな選択になるのでしょうか。


ねろ  2004-08-30 07:07:28  No: 85311

訂正
>Pコードコンパイルでコンパイルするか、VB6以前のVBでコンパイルするか、


ほのか  2004-08-30 07:25:46  No: 85312

ねろ様>うゎっ!ありがとうございます。m(__)m
誰がやってもできないとなると、諦めがつきました。^^;

とりあえずはPコードコンパイルで使っていきたいと思います。
だけど・・精度の高いストップウォッチになるのかなあ???

とりあえず・・解決にしておきます。
ありがとうございます。m(__)m


ほのか  2004-08-30 07:33:27  No: 85313

追記
NortonAntivirusは正規に常駐を外す方法が見当たらなくて・・・途方にくれて・・直接msvcp60.dllをリネームして使っているのをエラーを意図的に出してみた次第です。^^;


ねろ  2004-08-31 02:48:11  No: 85314

そんな危ないものを使わなくても、ストップウォッチだったら
CommandButtonとLabelとTimerを一つずつ置いて

Private Declare Function timeGetTime Lib "winmm.dll" () As Long
Dim lgStartTime As Long
Private Sub Command1_Click()
    With Command1
        If .Caption = "Start" Then
            lgStartTime = timeGetTime
            Timer1.Interval = 30
            Timer1.Enabled = True
            .Caption = "Stop"
            Label1.Caption = ""
        ElseIf .Caption = "Stop" Then
            Timer1.Enabled = False
            Label1.Caption = timeGetTime - lgStartTime
            .Caption = "Reset"
        ElseIf .Caption = "Reset" Then
            Label1.Caption = ""
            .Caption = "Start"
        End If
    End With
 End Sub
Private Sub Form_Load()
    Command1.Caption = "Start"
End Sub
Private Sub Timer1_Timer()
    Label1.Caption = timeGetTime - lgStartTime
End Sub

この位の方が良いかも、早押しも負けないし。


ほのか  2004-08-31 23:11:36  No: 85315

ねろ様>
うゎっ!ほんとだ!これでよかったんですね♪
表示の方はどうせ見えないから精度がないTimerコントロールを使っても良かったんですね。^^;
勉強になりました。ありがとうございます。m(__)m


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

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






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