VB6.0で統合環境上の「開始」では実行できるのですが、.exeファイルを作成して実行するとアプリケーションエラーが出ます。
再度インストールした方がよろしいでしょうか?
VBでアプリを作りましたがエラーがでて動きません。
どうしたらエラーがでなくなりますか?
という質問を聞いてあなたは回答できますか?
エラーが出ないように直して下さいぐらいしか回答のしようがありません。
根本的な解決ではありませんが、
Pコードコンパイルするととりあえず動くことがあります。
メモリー関係のエラーだと思われますがこの問題はかなり厄介です。
最悪の場合クリーンインストールまで必要になります。
まず最新のSPは当たっていますか。
やれ2様>すみません。他の方からダウンードしたソースだったので・・他人のせいにする気がして・・・
実は、http://www.vector.co.jp/soft/dl/win95/personal/se246014.htmlをダウンロードして、自分の環境でexeを再度作るとアプリケーションエラーになりました。
Say様>なんと!!Pコードコンパイルで動きました。^o^
これって・・・根本的解決?でいいのでしょうか?
ねろ様>1度Visual Studioを再インストールして、SP6を当てました。
別スレで上げましたが、SP6を当てる途中で、msvcp60.dllを開くことができません・・とか出て、「無視」を選択してインストールしていますが・・
これがまずいのかな?と思っていますが・・いかがでしょうか?
根本的解決というわけではありませんが・・・。
じつのところ、Pコードコンパイルとネイティブコードコンパイルには
動作上若干の差異があり、100%互換性ではありません。
(まあ、もともとVBはPASCALと同じPコード言語で、
ネイティブコードコンパイルはあとでとってつけた
機能ですから仕方ないのかもしれませんが。
文法もMODULAあたりを参考に設計してるし。)
統合環境での実行エンジンはPコードインタプリタですから
統合環境で動いてネイティブコードコンパイルで動かない場合、
Pコードコンパイルで動く可能性があるわけです。
ただし、実行速度は若干遅くなります。
>msvcp60.dllを開くことができません
立ち上がっている全てのプログラムを終了させて
もう一度やってみたらいかがでしょうか。
ねろ様>msvcp60.dllを消そうとしても消せなかったのでWindows2000をセルフモードで起動してリネームし、再度通常モードで立ち上げてVisual Studio6.0のSP6を当てたところ、新たなmsvcp60.dllができて最新バージョンになったようです。
ただ・・上記にしても相変らずネイティブコードコンパイルではアプリケーションエラーで動きませんでした。T.T
まず基本的な事ですけど、開発環境をインストールしたり
サービスパックを当てる時は起動している全てのプログラムを
停止します。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でコンパイルするか、
あきらめて違うコードを書くか、そんな選択になるのでしょうか。
訂正
>Pコードコンパイルでコンパイルするか、VB6以前のVBでコンパイルするか、
ねろ様>うゎっ!ありがとうございます。m(__)m
誰がやってもできないとなると、諦めがつきました。^^;
とりあえずはPコードコンパイルで使っていきたいと思います。
だけど・・精度の高いストップウォッチになるのかなあ???
とりあえず・・解決にしておきます。
ありがとうございます。m(__)m
追記
NortonAntivirusは正規に常駐を外す方法が見当たらなくて・・・途方にくれて・・直接msvcp60.dllをリネームして使っているのをエラーを意図的に出してみた次第です。^^;
そんな危ないものを使わなくても、ストップウォッチだったら
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
この位の方が良いかも、早押しも負けないし。
ねろ様>
うゎっ!ほんとだ!これでよかったんですね♪
表示の方はどうせ見えないから精度がないTimerコントロールを使っても良かったんですね。^^;
勉強になりました。ありがとうございます。m(__)m
ツイート | ![]() |