程序用了dll后不能正常关机,调试运行中关闭程序vb不能自动退出调试运行状态.

解决方案 »

  1.   

    是否用到了多线程?
    是否用到了Hook?
      

  2.   

    应该是用到Hook或多线程。特别惨的情况,是出错的时候,没办法中止,只能结束VB进程,如果代码没保存...汗
      

  3.   

    你用了什么dll,总要告诉大家吧
      

  4.   

    不好意思!
    VB下使用串口控制顾客显示屏程序加载api_com.dll文件出现
    问题1:调用com_init后 第一次com_send无效以后都有效
    问题2:调用com_rest后 再用com_init顾客显示屏无效(不变化),必须要拔出com口再插回去重新检测.
      

  5.   

    VB下使用串口控制顾客显示屏
    使用VB编程的人员如果需要在Windows下使用串口控制顾客显示屏或串口打印机,有很多种方法,可以使用OCX控件也可以使用动态连接库的方法。我们这里提供两种方法:
    一种是使用动态连接库:
    添加一个bas模块,在其中写入调用外部动态库的方法:
    Public Declare Function com_init Lib "api_com.dll" (ByVal com As Integer, ByVal baud As Integer) As Boolean
    Public Declare Function com_send Lib "api_com.dll" (ByVal buf As String, ByVal lens As Long) As Boolean
    Public Declare Function com_rest Lib "api_com.dll" () As Boolean
    Com_init(1,2400)是打开串口进行通讯,1是打开COM1,波特率为2400。如果打开成功,它会返回逻辑真告知串口打开。
    Com_rest是关闭串口。
    Com_send(命令,长度)是发送数据到串口。
    下面语句就是控制顾客显示屏开钱箱的命令,其他的命令集只需要改变PDStr的值即可:
    Private Sub CmdSend_Click()
    PDStr=Chr(2)+Chr(77)
    If com_send(PDStr, Len(PDStr)) Then
    MsgBox ("send ok")
    Else
    MsgBox ("Send err")
    End If
    End Sub
    下面是控制顾客显示屏显示1234.56的命令:
    Private Sub CmdSend_Click()
    PDStr=Chr(27)+Chr(81)+Chr(65)+”1234.56”+Chr(13)
    If com_send(PDStr, Len(PDStr)) Then
    MsgBox ("send ok")
    Else
    MsgBox ("Send err")
    End If
    End Sub
    下面是控制顾客显示屏显示“总计”灯的命令:
    Private Sub CmdSend_Click()
    PDStr=Chr(27)+Chr(115)+”2”
    If com_send(PDStr, Len(PDStr)) Then
    MsgBox ("send ok")
    Else
    MsgBox ("Send err")
    End If
    End Sub
    如果需要控制串口的POS58打印机打印,也只需要重新给PDStr赋值:
    PDStr=”VB Printer on COM1”+Chr(10)
    要串口POS58开钱箱,则需要如下赋值:
    PDStr= Chr(27)+”p”+Chr(0)+Chr(60)+Chr(255)
      

  6.   

    退出前是否关闭串口了?我没有用过这个DLL
      

  7.   

    是不是同步通讯,而且没有设置TimeOut,
    造成数据的阻塞,无限的等待状态.
      

  8.   

    程序调用com_rest关闭串口后就不能再通过com_init打开串口了有人研究过这个dll?出来帮帮我了都好几天了...
      

  9.   

    是不是同步通讯,而且没有设置TimeOut,
    造成数据的阻塞,无限的等待状态.
    请问如何设置timeout?
      

  10.   

    //问题1:调用com_init后 第一次com_send无效以后都有效这个估计是com_init需要一定的时间//调用com_rest后 再用com_init顾客显示屏无效(不变化),必须要拔出com口再插回去重新检测.这个和junki(『.NET技术争霸天下』) 的看法一样
      

  11.   

    我在com_init后加了缓冲问题解决了
    com_rest放在程序退出前执行com口工作正常了
    但就是无法正常关闭程序....(程序窗口全部关闭任务管理器中程序还在)
    请问这个要怎么解决?期待~
      

  12.   

    强制结束进程不是一个好的办法不能正常关闭程序,可能是还需要你做一些清理的工作,也可能是dll本身就有问题
      

  13.   

    可能是dll的问题.现在改用mscomm控件了问题总算解决了.散分