2016-04-14 6 views
1

Ich habe activex DLL, die Code für Nachrichtenwarteschlange hat, lesen und schreiben von Remote-sowie lokalen Rechner. Ich habe einige Änderungen für das Lesen von Nachrichten aus der fernen Warteschlange durchgeführt und diese DLL mit der Beispielformularanwendung getestet. die aber fein funktioniert, wenn ich diese DLL in meine Testmaschine kopiert (bei der tatsächlichen Anwendung) i bin vor „Laufzeitfehler 91 Objektvariable oder With-Blockvariable nicht festgelegt“ FehlerLaufzeitfehler 91 Objektvariable oder Mit Blockvariable nicht gesetzt Vb6 in Testmaschine aber richtig in Entwicklungsmaschine funktioniert

, wenn ich meine zufällt seine Arbeits ändert Fein

Code ändert nach

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 

Code vor

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 
ändert

Vielen Dank im Voraus

Antwort

0

ich diesen Fehler irgendwie geschafft, in Änderungen folgenden Code zu lösen nur kommentiert

MQTransaction.Commit 
Set MQTransaction = Nothing 

noch nicht wissen, warum: - |

+0

Konnte das sein, wenn Sie das 'MQDispenser'-Objekt freigegeben haben, das dann auch' MQTransaction' freigegeben hat. Versuchen Sie, die 'MQTransaction.Commit' vor' Set MQDispenser = Nothing' zu platzieren. – MarkL