如何解决VB6中的运行时错误8015?
你好 我正试图将数据发送到COM1。在comport“COM1”上设置了通用打印机驱动程序。将数据发送到此端口时,我收到运行时错误“8015:无法设置通信状态,可能有一个或多个无效通信参数”。单击该错误消息的“确定”后,我收到另一个错误,即运行时错误“8018:操作仅在端口打开时有效”。我相信这个问题是可以解决的,因为在命令提示符下,我可以使用“copy C:\textfile.txt COM1”命令将文本文件复制到端口,并且它可以正常工作。这就是我的处境 我尝试过的方法如下:如何解决VB6中的运行时错误8015?,vb6,Vb6,你好 我正试图将数据发送到COM1。在comport“COM1”上设置了通用打印机驱动程序。将数据发送到此端口时,我收到运行时错误“8015:无法设置通信状态,可能有一个或多个无效通信参数”。单击该错误消息的“确定”后,我收到另一个错误,即运行时错误“8018:操作仅在端口打开时有效”。我相信这个问题是可以解决的,因为在命令提示符下,我可以使用“copy C:\textfile.txt COM1”命令将文本文件复制到端口,并且它可以正常工作。这就是我的处境 我尝试过的方法如下: 使用MSCom
- 使用MSComm控件(产生上述错误)
- 使用windows API调用(这会产生另一个错误“无效函数”) API链接:
- 通过“复制”命令将shell函数用于shell cmd.exe(此方法有效 当它想要的时候)
- 使用在复制到端口时不起作用的VB6e FileCopy()函数
Private Sub Initialize_COMPort()
On Error GoTo COMPort_Error
If MSComm1.PortOpen Then
MsgBox "Port is opened"
MSComm1.PortOpen = False
End If
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = Val(CbCOMPorts.ListIndex) + 1
MSComm1.PortOpen = True
MSComm1.RThreshold = 1
MSComm1.Handshaking = comXOnXoff
Exit Sub
COMPort_Error:
MsgBox Err.Number & " - " & Err.Description, vbCritical + vbOKOnly, "Port Tester", Err.HelpFile, Err.HelpContext
End Sub
以下情况下会发生错误:
MSComm1.PortOpen = True
被执行
@Hrqls我很欣赏你的代码,但是你给我的代码和我的想法很相似,执行时错误仍然存在。错误发生在同一语句中
.PortOpen = True
@Hrqls我以前没有尝试过使用打印机控件,但是这个设备实际上不是文本打印机,而是卡片压花机。这是“Matica Z3i AF”压花机,我目前正在开发的程序将用于压花卡片
目前采用的方法是使用Empressure是一个批处理文件,它基本上运行文本文件的“复制”命令,并以Empressure理解的格式将卡信息打印到打印中
在此之前,我将尝试使用打印机控件。感谢您的回复,如果问题得到解决,我将让每个人都了解最新情况。我假设错误来自打印机已在使用COM1,在这种情况下,您的MSCOMM控件也不能使用COM1 你想打印什么 打印内容最简单、最直接的方法是使用Printer对象 例如,要打印当前时间:
Private Sub Command1_Click()
Printer.Print CStr(Now)
Printer.EndDoc
End Sub
我假设错误来自打印机已经在使用COM1,在这种情况下,MSCOMM控件也不能使用COM1 你想打印什么 打印内容最简单、最直接的方法是使用Printer对象 例如,要打印当前时间:
Private Sub Command1_Click()
Printer.Print CStr(Now)
Printer.EndDoc
End Sub
要检查端口是否已在使用中,您可以打开它并跟踪错误代码 在列表框中列出可用端口的小项目:
'1 form with :
' 1 CommandButton : Name = Command1
' 1 Listbox : Name = List1
' 1 MSComm : Name = MSComm1
Option Explicit
Private Enum PortAttr
PortFree = 0
PortInUse = 1
PortUnknown = 2
End Enum
Private Function CheckPort(intPort As Integer) As PortAttr
On Error GoTo ErrorFound
With MSComm1
If .PortOpen Then .PortOpen = False
.CommPort = intPort
.PortOpen = True
CheckPort = PortFree
If .PortOpen = False Then .PortOpen = True
End With 'MSComm1
Exit Function
ErrorFound:
Select Case Err.Number
Case 8002 'port doesnt exist
CheckPort = PortUnknown
Case 8005 'port already in use
CheckPort = PortInUse
Case Else
MsgBox Err.Description, vbCritical, "Error " & CStr(Err.Number) & " on Port " & CStr(intPort)
End Select
On Error GoTo 0
End Function
Private Sub ListPorts()
Dim intIndex As Integer
Dim intPort As Integer
Dim intFree As Integer
On Error GoTo ErrorFound
With MSComm1
If .PortOpen Then .PortOpen = False
intPort = .CommPort
List1.Clear
List1.AddItem "--- Not Used ---"
List1.ItemData(0) = -2 'not possible
List1.AddItem "---- In Use ----"
List1.ItemData(1) = -2 'not possible
intFree = 0
For intIndex = 1 To 16
Select Case CheckPort(intIndex)
Case PortFree
intFree = intFree + 1
List1.AddItem "Com" & CStr(intIndex), intFree
List1.ItemData(intFree) = intIndex
Case PortInUse
List1.AddItem "Com" & CStr(intIndex)
End Select
Next intIndex
If .PortOpen Then .PortOpen = False
.CommPort = intPort
If CheckPort(intPort) = PortFree Then
If .PortOpen = False Then .PortOpen = True
End If
End With 'MSComm1
Show
Exit Sub
ErrorFound:
MsgBox Err.Description, vbCritical, "Error " & CStr(Err.Number)
On Error GoTo 0
End Sub
Private Sub Command1_Click()
ListPorts
End Sub
要检查端口是否已在使用中,您可以打开它并跟踪错误代码 在列表框中列出可用端口的小项目:
'1 form with :
' 1 CommandButton : Name = Command1
' 1 Listbox : Name = List1
' 1 MSComm : Name = MSComm1
Option Explicit
Private Enum PortAttr
PortFree = 0
PortInUse = 1
PortUnknown = 2
End Enum
Private Function CheckPort(intPort As Integer) As PortAttr
On Error GoTo ErrorFound
With MSComm1
If .PortOpen Then .PortOpen = False
.CommPort = intPort
.PortOpen = True
CheckPort = PortFree
If .PortOpen = False Then .PortOpen = True
End With 'MSComm1
Exit Function
ErrorFound:
Select Case Err.Number
Case 8002 'port doesnt exist
CheckPort = PortUnknown
Case 8005 'port already in use
CheckPort = PortInUse
Case Else
MsgBox Err.Description, vbCritical, "Error " & CStr(Err.Number) & " on Port " & CStr(intPort)
End Select
On Error GoTo 0
End Function
Private Sub ListPorts()
Dim intIndex As Integer
Dim intPort As Integer
Dim intFree As Integer
On Error GoTo ErrorFound
With MSComm1
If .PortOpen Then .PortOpen = False
intPort = .CommPort
List1.Clear
List1.AddItem "--- Not Used ---"
List1.ItemData(0) = -2 'not possible
List1.AddItem "---- In Use ----"
List1.ItemData(1) = -2 'not possible
intFree = 0
For intIndex = 1 To 16
Select Case CheckPort(intIndex)
Case PortFree
intFree = intFree + 1
List1.AddItem "Com" & CStr(intIndex), intFree
List1.ItemData(intFree) = intIndex
Case PortInUse
List1.AddItem "Com" & CStr(intIndex)
End Select
Next intIndex
If .PortOpen Then .PortOpen = False
.CommPort = intPort
If CheckPort(intPort) = PortFree Then
If .PortOpen = False Then .PortOpen = True
End If
End With 'MSComm1
Show
Exit Sub
ErrorFound:
MsgBox Err.Description, vbCritical, "Error " & CStr(Err.Number)
On Error GoTo 0
End Sub
Private Sub Command1_Click()
ListPorts
End Sub
您正在使用的计算机是否已安装Matica Z3i AF,打印机是否已使用COM1?如果是,则端口正在使用,MSComm控件无法访问它。确保没有其他硬件或软件已打开端口 如果端口没有其他用途,批处理文件是否专门设置速度、奇偶校验或停止位?(模式COM1:9600,N,8,1,P)如果是这样,您可以尝试使用批处理文件中的设置 如果这些都没有帮助,我找不到你的浮雕的建议设置,所以你可以尝试基本端口设置。您可以使用模式COM1/状态查询端口。该命令不区分大小写,将返回如下内容: Status for device COM1: ----------------------- Baud: 1200 Parity: None Data Bits: 7 Stop Bits: 1 Timeout: OFF XON/XOFF: OFF CTS handshaking: OFF DSR handshaking: OFF DSR sensitivity: OFF DTR circuit: ON RTS circuit: ON 设备COM1的状态: ----------------------- 波特:1200 平价:无 数据位:7 停止位:1 超时:关闭 XON/XOFF:关 CTS握手:关闭 DSR握手:关闭 DSR灵敏度:关闭 DTR电路:ON RTS电路:打开
您正在使用的计算机是否已安装Matica Z3i AF,打印机是否已使用COM1?如果是,则端口正在使用,MSComm控件无法访问它。确保没有其他硬件或软件已打开端口 如果端口没有其他用途,批处理文件是否专门设置速度、奇偶校验或停止位?(模式COM1:9600,N,8,1,P)如果是这样,您可以尝试使用批处理文件中的设置 如果这些都没有帮助,我找不到你的浮雕的建议设置,所以你可以尝试基本端口设置。您可以使用模式COM1/状态查询端口。该命令不区分大小写,将返回如下内容: Status for device COM1: ----------------------- Baud: 1200 Parity: None Data Bits: 7 Stop Bits: 1 Timeout: OFF XON/XOFF: OFF CTS handshaking: OFF DSR handshaking: OFF DSR sensitivity: OFF DTR circuit: ON RTS circuit: ON 设备COM1的状态: ----------------------- 波特:1200 平价:无 数据位:7 停止位:1 超时:关闭 XON/XOFF:关 CTS握手:关闭 DSR握手:关闭 DSR灵敏度:关闭 DTR电路:ON RTS电路:打开
不要将打印机设置在端口COM1上。 COM1端口将被COM1端口中的打印机占用。 使用Visual Basic MSCOMM组件时,不需要任何打印机驱动程序。 如果您将打印机设置为COM1端口。 您可以使用以下代码。此代码不受打印机设置的影响 Visual Basic:
打开“COM1”输出为#1不要在端口COM1上设置打印机。 COM1 por