Mal wieder spätes Binden im Zusammenhang mit OPC

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RiLo.

    Mal wieder spätes Binden im Zusammenhang mit OPC

    Hallo zusammen,

    ich habe hier scheinbar ein seltenes Problem des späten Bindens und finde keine Lösung, um es unter Option Strict On zu beheben.

    Vielleicht kurz vorab zur Erklärung: Es wird versucht über einen OPC-DA-Server mehrere Worte (1 Wort = Int16) einer SPS (Speicherprogrammierbare Steuerung) auszulesen.

    Dazu wird eine Lesetabelle als "Dim objDaten(0) As Object" deklariert.
    Anschließend wird eine Funktion einer DLL aufgerufen, an welche die Lesetabelle per "ByRef" übergeben wird.

    Zurück bekomme ich die gefüllte Lesetabelle und versuche die Daten beispielsweise mit

    VB.NET-Quellcode

    1. TextBox1.Text = CStr(objDaten(0)(0))
    2. TextBox2.Text = CStr(objDaten(0)(1))

    auszulesen. Logischerweise unterstreicht er mir das "objDaten(0)(0)" und meckert wegen spätem Binden.

    Mit

    VB.NET-Quellcode

    1. Dim objDaten(0) as Short()

    kann die DLL nicht arbeiten.

    Ich hatte auch noch versucht einen weiteren Array mit Dim Lesetabelle() as Short anzulegen.
    Bei

    VB.NET-Quellcode

    1. LeseTabelle = objDaten

    kommt dann aber: "Der Wert des Typs Object() kann nicht in Typ Short() konvertiert werden, da Object nicht von Short abgeleitet ist."

    Kann mir bitte jemand sagen wo mein Denkfehler liegt?
    Das ist ein Deklarationsproblem. Du müsstest dem Compiler klarmachen, dass Du ein Mehrfach-Array hast. Das hier klappt:

    VB.NET-Quellcode

    1. Dim objDaten As Object()() = Nothing
    2. TextBox1.Text = CStr(objDaten(0)(0))
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Entschuldigt meine späte Antwort.

    Vielen Dank erstmal für die Vorschläge.

    Ich habe in einem alten Projekt eines Kollegen noch etwas gefunden, was funktioniert:

    VB.NET-Quellcode

    1. Dim LeseTabelle() as Short
    2. Dll.Aufruf("NameDerVariable", CObj(LeseTabelle))
    3. TextBox1.Text = CStr(LeseTabelle(0))
    4. TextBox2.Text = CStr(LeseTabelle(1))