timeSetEventを勉強するため次のサンプルをテストしてみました。
VBのエディタ上で実行すると問題なく動きますが、exeを作成して
exeを実行すると、エラーが発生してしまいます。
エラー番号などの表示がなく「問題が発生したため・・・・送信する
・しない」のポップアップ表示となります。
また sleep 500 をコメントにした場合は、 exeでも問題なく動作し
ます。
timeSetEventの中で他のAPI 関数が呼べない仕様なのでしょうか。
超初心者なので、とんでもない勘違いをしているかもわかりませんが
よろしくご指導お願いします。
環境:Windows XP VB6.0
'########################## 標準モジュール ######################
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'<timeSetEvent> ****************** 高精度タイマ
Declare Function timeSetEvent Lib "WINMM" _
(ByVal uDelay&, _
ByVal uResolution&, _
ByVal lpFunction&, _
ByVal dwUser&, _
ByVal uFlags&) As Long
'<Timer STOP> ***************タイマを停止
Declare Function timeKillEvent Lib "WINMM" _
(ByVal uID&) As Long
'
Public tmevent As Long
Public i As Long
'-----------------------------------------------------------
Public Function TIMER_PROC(ByVal IDEvent As Long, _
ByVal uReserved As Long, _
ByVal dwUser As Long, _
ByVal dwReserved1 As Long, _
ByVal dwReserved2 As Long) As Long
i = i + 1
Form1.Label1.Caption = i
'*****************
Sleep 500
'*****************
DoEvents
End Function
'########################## フォーム ######################
'timeSetEventでテスト
Private Sub Command1_Click()
tmevent = timeSetEvent(1000, 1, AddressOf TIMER_PROC, 0, 1)
End Sub
'timeSetEvent 停止
Private Sub Command2_Click()
timeKillEvent tmevent
End Sub
コールバック関数を使って、且つ、Native-Code-Compileしたければ、
http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/StpWch20.lzh
のような感じで。
こうするのが面倒なのであれば、
http://www.koalanet.ne.jp/~akiya/vbtaste/vbp/StpWch00.lzh
のような感じで。
K.J.K.さん。またまたお世話になりました。ありがとうございました。
K.J.K.さんに示していただいたプログラムは、ソースの理解にしばらく
時間がかかりそうです。(つくづく未熟さを痛感しました)
しかし、がんばって理解しようと思います。
>Native-Code-Compileしたければ
また、おはずかしい話ですがexeの作成方法に2種類あるのも初めて知り
ました。P-CODEを選択してexeを作成したところ、exeで動作しました。
さらに色々知らべていきたいと思います。
ほんとうにありがとうございました。
| ツイート |
|