Dll 运行时错误91对象变量或With block变量未在测试机器中设置vb6,但在开发机器中工作正常

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

我有activex dll,它有消息队列代码,从远程和本地机器读写。 我对从远程队列读取消息做了一些更改,并用示例表单应用程序测试了该dll。 哪个很好 然而,当我把这个dll复制到我的测试机器上时(在实际应用中) 我面临“运行时错误91对象变量或未设置块变量” 错误

如果我恢复我的更改,工作正常

更改后的代码

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
之前。