Exception nach Framework wechsel

Gurke258

Level-2
Beiträge
69
Reaktionspunkte
3
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich habe aktuell ein Problem auf Arbeit mit dem ich nicht wirklich weiter komme. Habe ein Projekt vom Kollegen übernommen in dem ich mit einem MQTT-Server kommunizieren soll.

Zu dem Problem:

Die MQTT Bibliothek läuft nur ab Framework 4.5.2 und das Projekt lief bis jetzt nur unter Framework 3.5. Ich habe also die Framwork-Version hoch gesetzt und kann jetzt das Programm nicht mehr mit VS 2017 debuggen und auch die .exe nicht mehr öffnen.

Hier mal der Code-Ausschnitt von dem Abschnitt, in dem die Exeption auftritt:

Code:
'öffentliche Variablen OPC
    Public Itemhandle_Visu As Array
    Public WithEvents ServerObj As OPCServer
    Public WithEvents GroupObjvisu As OPCGroup
    Public WithEvents GroupsObjvisu As OPCGroups
    Public WithEvents GroupData As OPCGroup
    Public WithEvents GroupsData As OPCGroups
    Public ItemData As OPCItem
    Public Itemhandle_Data As Object

Public Sub Schreibe_OPC_ID(ByVal OPC_Wert As Object, ByVal OPC_ID As Object)

        Dim Dims() As Integer = New Integer() {1}
        Dim Bounds() As Integer = New Integer() {1}
        Dim Serverhandles As Array = Array.CreateInstance(GetType(Integer), Dims, Bounds)
        Dim MyErrors As Array = Array.CreateInstance(GetType(Integer), Dims, Bounds)
        Dim MyValues As Array = Array.CreateInstance(GetType(Object), Dims, Bounds)

        Try

            ' Initialize
            Serverhandles.SetValue(Itemhandle_Visu(OPC_ID), 1)
            MyErrors.SetValue(0, 1)
            MyValues.SetValue(OPC_Wert, 1)

            [B]GroupObjvisu.SyncWrite(1, Serverhandles, MyValues, MyErrors)[/B]
            'Edit_WriteRes.Text = ServerObj.GetErrorString(MyErrors(1))

            Exit Sub

            'ErrorHandler:
            '            MsgBox(Err.Description & Chr(13), MsgBoxStyle.Critical, "ERROR")

        Catch

            MsgBox("Kommunikationsfehler" & Chr(13) & "ID " & OPC_ID, MsgBoxStyle.Critical, "Fehler Schreibe ID")

        End Try

    End Sub

Der Inhalt der Exception lautet:

Code:
System.AccessViolationException:  "Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben.  Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt  ist."

Die verwendeten Bibliothelen sind Interop.OPCAutomation.dll und Interop.OPCSiemensDAAutomation.

Kann es sein das diese Bibiliotheken das neue Framework nicht unterstützen? Wäre für Hilfe dankbar.


Ps. Ja ich weiß das in diesem Projekt VB6 & VB.Net gemischt sind. Habe allerdings keine Zeit das komplett neu zu schreiben und bitte euch daher nicht so kritisch zu sein ;)

EDIT:

Ich habe jetzt folgende Codezeilen online gefunden welche ich in die app.config eingefügt habe und damit habe ich den Fehler nicht mehr, doch leider habe ich nicht verstanden was diese bedeuten ;/

Code:
  <runtime>
    <legacyCorruptedStateExceptionsPolicy enabled="true"/>
  </runtime>
 
Zuletzt bearbeitet:
In deinem Projekt gibt es ungemangedten / unsicheren Code, der auf Speicherbereich zugreift, die entweder nicht allokiert wurden oder die geschützt sind.
Das verursacht die Ausnahme.
Ausnahmen die Zugriffsverletzungen behandeln konnten bis .net 3.5 in der Applikation abgefangen und behandelt werden (try catch). Ab .net 4.0 ist dies standardmäßig nicht mehr möglich, da derartige Fehler im Code als sehr schwerwiegend erachtet werden und daher von vorn herein unterbunden werden sollten. Um dies zu erzwingen können diese Ausnahmen nicht mehr in der Anwendung selber behandelt werden.
Mit
Code:
<legacyCorruptedStateExceptionsPolicy enabled="true"/>
Zwingst du die CLR diese Ausnahmen (wie in .net 3.5) in deiner Anwendung abzufangen. D.h. im schlimmsten Fall kehrst du damit einen kritischen Zugriffsfehler einfach nur unter den Teppich. Das Kernproblem bleibt (die Zugriffsverletzung) weiterhin bestehen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Okay vielen Dank für die ausführliche Antwort.

D.h. ich müsste, um diesen Fehler zu vermeiden, eine neuere .dll verwenden oder den entsprechenden Code-Abschnitt neu bzw. umschreiben?
 
Zurück
Oben