Dll 运行时错误91对象变量或With block变量未在测试机器中设置vb6,但在开发机器中工作正常
我有activex dll,它有消息队列代码,从远程和本地机器读写。 我对从远程队列读取消息做了一些更改,并用示例表单应用程序测试了该dll。 哪个很好 然而,当我把这个dll复制到我的测试机器上时(在实际应用中) 我面临“运行时错误91对象变量或未设置块变量” 错误 如果我恢复我的更改,工作正常 更改后的代码Dll 运行时错误91对象变量或With block变量未在测试机器中设置vb6,但在开发机器中工作正常,dll,vb6,Dll,Vb6,我有activex dll,它有消息队列代码,从远程和本地机器读写。 我对从远程队列读取消息做了一些更改,并用示例表单应用程序测试了该dll。 哪个很好 然而,当我把这个dll复制到我的测试机器上时(在实际应用中) 我面临“运行时错误91对象变量或未设置块变量” 错误 如果我恢复我的更改,工作正常 更改后的代码 Private Function RetrieveMessage(ByVal MQReceive As msmq.MSMQQueue, _ MQTransaction As msmq.M
Private Function RetrieveMessage(ByVal MQReceive As msmq.MSMQQueue, _
MQTransaction As msmq.MSMQTransaction, _
ByVal Wait As Boolean, MessageLabel As String, MessageBody As String) As Boolean
'Dim MQReceive As MSMQ.MSMQQueue
Dim MQMsgRec As MSMQMessage
Dim MQDispenser As msmq.MSMQCoordinatedTransactionDispenser
On Error GoTo ErrorHandler
RetrieveMessage = False
If Not m_bQueueExists Then
Err.Raise vbObjectError + 1, "MicrosoftMQImpl", "Queue " & m_sQueueName & _
" does not exist"
Else
Set MQDispenser = New msmq.MSMQCoordinatedTransactionDispenser
'Begin Transaction
Set MQTransaction = MQDispenser.BeginTransaction
Dim bMessageFound As Boolean
bMessageFound = False
Set MQMsgRec = MQReceive.Receive(ReceiveTimeout:=IIf(Wait = True, DISPATCH_MESSAGE_INTERVAL, 0))
'Set MQMsgRec = MQReceive.Receive(Transaction:=MQTransaction, _
' ReceiveTimeout:=IIf(Wait = True, DISPATCH_MESSAGE_INTERVAL, 0))
If MQMsgRec Is Nothing Then
bMessageFound = False
Else
bMessageFound = True
MessageBody = CStr(MQMsgRec.Body)
MessageLabel = CStr(MQMsgRec.Label)
End If
Set MQDispenser = Nothing
Set MQMsgRec = Nothing
RetrieveMessage = bMessageFound
MQTransaction.Commit
Set MQTransaction = Nothing
End If
Exit Function
ErrorHandler:
If Not (MQTransaction Is Nothing) Then
MQTransaction.Abort
Set MQTransaction = Nothing
End If
LogNTEvent "PHLMessaging:MicrosoftMQImpl:RetrieveMessage", Err.Description, eNTLog_Error
Err.Raise Err.Number, Err.Source, Err.Description
End Function
更改前的代码
Private Function RetrieveMessage(ByVal MQReceive As msmq.MSMQQueue, _
MQTransaction As msmq.MSMQTransaction, _
ByVal Wait As Boolean, MessageLabel As String, MessageBody As String) As Boolean
'Dim MQReceive As MSMQ.MSMQQueue
Dim MQMsgRec As MSMQMessage
Dim MQDispenser As msmq.MSMQTransactionDispenser
On Error GoTo ErrorHandler
RetrieveMessage = False
If Not m_bQueueExists Then
Err.Raise vbObjectError + 1, "MicrosoftMQImpl", "Queue " & m_sQueueName & _
" does not exist"
Else
Set MQDispenser = New msmq.MSMQTransactionDispenser
'Begin Transaction
Set MQTransaction = MQDispenser.BeginTransaction
Dim bMessageFound As Boolean
bMessageFound = False
Set MQMsgRec = MQReceive.Receive(Transaction:=MQTransaction, _
ReceiveTimeout:=IIf(Wait = True, DISPATCH_MESSAGE_INTERVAL, 0))
If MQMsgRec Is Nothing Then
bMessageFound = False
Else
bMessageFound = True
MessageBody = CStr(MQMsgRec.Body)
MessageLabel = CStr(MQMsgRec.Label)
End If
Set MQDispenser = Nothing
Set MQMsgRec = Nothing
RetrieveMessage = bMessageFound
End If
Exit Function
ErrorHandler:
If Not (MQTransaction Is Nothing) Then
MQTransaction.Abort
Set MQTransaction = Nothing
End If
LogNTEvent "PHLMessaging:MicrosoftMQImpl:RetrieveMessage", Err.Description, eNTLog_Error
Err.Raise Err.Number, Err.Source, Err.Description
End Function
提前感谢我设法解决了这个错误 刚刚在更改中注释了以下代码
MQTransaction.Commit
Set MQTransaction = Nothing
仍然不知道为什么:-我设法解决了这个错误 刚刚在更改中注释了以下代码
MQTransaction.Commit
Set MQTransaction = Nothing
仍然不知道为什么:-可能是在您释放
MQDispenser
对象时,该对象随后也释放了MQTransaction
。尝试将MQTransaction.Commit
放在Set MQDispenser=Nothing
之前。可能是在您释放MQDispenser
对象时,该对象随后也释放了MQTransaction
。尝试将MQTransaction.Commit
放在Set MQDispenser=Nothing
之前。