Daten lesen über serielle Schnittstelle per externem (alte) DLL

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

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Daten lesen über serielle Schnittstelle per externem (alte) DLL

    Hallo liebe Community,

    ich habe mir in VS2019 (Community Edition) eine neue Windows-Forms-Anwendung in .NET 4.7.2 erstellt. Ich habe die SerialPort-Komponente auf die Form gezogen und auch soweit die Einstellungen vorgenommen, sodass das Event "SerialPort1_DataReceived" angetriggert wird.

    An der seriellen Schnittstelle hängt ein Lesegerät. Wenn man an das Lesegerät einen Key dran hält, wird also mein DataReceived-Event erfolgreich ausgelöst. In dem Event versuche ich auf die Funktionen einer externen DLL zuzugreifen. Ich bekomme allerdings irgendwie dir Brücke zwischen DLL und dem Funktionsaufruf aus .Net heraus nicht hin.

    Als Beispiel hier die Definition der DLL-Funktion laut Doku:

    C-Quellcode

    1. BOOL TdcSetParams(ptdcparamex)
    2. Parameter
    3. ptdcparamex (TDCPARAMEX *)


    Ich versuche das in meiner VB-Datei also wie folgt zu mappen:

    VB.NET-Quellcode

    1. Public Declare Function TdcSetParams Lib "TdwCey32.dll" (ptdcparamex As TDCPARAMEX) As Long


    So rufe ich die Funktion aus der DLL auf:

    VB.NET-Quellcode

    1. fRet = TdcSetParams(tdcpar)


    Wenn ich meine Form nun ausführe und den Key an den Leser halte, erhalte ich an dieser Stelle folgende Fehlermeldung:
    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."


    Ich hab schon so einiges zum Fixen des Problems getestet und auch die Vorschläge hier:
    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."

    Ich komme einfach nicht mehr weiter. Könnt ihr mir hier weiterhelfen?

    Grüße,
    Dig
    @digidigi77 Willkommen im Forum. :thumbup:
    Zum Ansprechen einer nativen DLL gugst Du auch hier: Austausch von Daten zwischen einer VB.NET-exe und einer C-DLL, 32 und 64 Bit
    Was genau soll Dein Aufruf bewirken?
    Wenn das DataReceived-Event ankommt, sind die Daten bereits gelesen, Deine DLL greift da ins Leere :!:
    Wenn Du Binär-Daten empfangen willst, dann lies die Daten als Bytes:
    docs.microsoft.com/de-de/dotne…yte?view=netframework-4.8
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!