我现在对一个硬件设备进行编程。在编程过程中,我们要使用一个定时器来刷新(获取)硬件的状态。然后根据各种不同状态,来进行不同的操作。现在,我要把这个功能进行封装,就是我要编写一个DLL来封装这些功能,以便以后扩展使用。DLL中定义个事件来触发各种硬件状态。但是我知道用VB写DLL无法调用定时器(或者我还不知道如何调用)来获取硬件状态。请问我现在该如何解决这个问题。

解决方案 »

  1.   

    Public Declare Function SetTimer Lib "user32" Alias "SetTimer" (ByVal hWnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long用API设置定时器
      

  2.   

    public sub lpTimerFunc(
      byval hwnd as long,     'handle of window for timer messages
      byval uMsg as long,     'WM_TIMER message
      byval idEvent as long,  'timer identifier
      byval dwTime as long    'current system time
    )end subSetTimer 0, 0, 1000, AddressOf lpTimerFunc
      

  3.   

    如果精度要求不高 ,可以用循环和延时来实现
    Dim blnCancel As Boolean
    Sub TimerEvent(ByVal Interval As Long)'最小周期1s
        Do
            DoEvents
            If blnCancel Then Exit Do
            Delay Interval
            Call aaa
            
        Loop
    End Sub
    Sub Delay(ByVal t As Long)
        Dim start As Long
        start = Timer
        Do
            DoEvents        If Timer >= start + t Then Exit Do
        Loop
    End Sub
    Sub aaa()
        Static num As Integer
        num = num + 1
        Me.Caption = num
    End SubPrivate Sub Form_Load()
        Me.Show
        DoEvents
        TimerEvent (1)
        
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        blnCancel = True
        End
    End Sub
      

  4.   

    activeX document dll 可以用定时器
      

  5.   

    1)定时器消息是通过窗体的消息循环来工作的,故不添加窗体的话就不能使用定时器
    2)你可以使用多媒体定时器来实现定时任务,即使没有窗体,参考
    http://www.csdn.com.cn/program/580.htm
    3)也可以在DLL里面开启一个线程循环来完成你说的任务(可用API函数Sleep控制延时)以上仅供参考
      

  6.   

    我这个问题我已经解决了。在MSDN中,有一个现成的代码定时器。如果有人需要,请联系我。我可以发给你们,这个定时器效果不错。
      

  7.   

    假设你的MSDN在D盘,则如下路径有楼主说的API定时器,的确比那个控件好多了:D:\Program Files\Microsoft Visual Studio\MSDN98\98VS\2052\SAMPLES\VB98\Coffee
      

  8.   

    我这里都是使用CCRP Timer控件大家可以交流,
      

  9.   

    有SetTimer、Sleep等API函数可以实现
      

  10.   

    Option ExplicitDim WithEvents ti As TimerPrivate Sub Class_Initialize()
    ti.Interval = 100
    ti.Enabled = TrueEnd SubPrivate Sub ti_Timer()'这里写入你想要的函数
    End Sub
    这样也不知道可不可以,似乎这个很简单
      

  11.   

    jjkk168(老加班的人--每日要顶二十贴) 你的方法我试了在   Private Sub Class_Initialize()
                            ti.Interval = 100
                            ti.Enabled = True                    End Sub出现了错误