GetDLLError

Alles zum Kommunikationstreiber ComDrvS7

Moderatoren: Matthias, Weiss_MHJ

Antworten
ronnie.b
SPSTreff-User
Beiträge: 6
Registriert: 11 Jul 2010, 08:16
Wohnort: RLP

GetDLLError

Beitrag von ronnie.b »

Hallo,
ich experimentiere gerade etwas mit VB.net(2008).
Bei der Funktion "MPI_A_GetDLLError" kommt (egal welche Fehlernummer) immer ein leerer String zurück.
Hat jemand eine Ahnung woran das liegen könnte?

Hier noch etwas code:

Code: Alles auswählen

        <DllImport("mpia32_v60_vb.dll")> _
        Public Shared Function MPI_A_GetDLLError(ByVal Handle As Integer, ByVal ErrorString As String, ByVal ErrorNo As UShort) As Integer
        End Function

    Private Function ReadBitValue(ByVal data As SPSRequestInfo) As Boolean
        Dim Buffer As Byte
        Dim ENr As Short
        Dim ErrStr As String = "" '= New String(Chr(0), 255)
        If (data.GetBit < 0 OrElse data.GetBit > 7) Then
            Throw New ArgumentException("Ungültige Bit-Nummer")
        End If
        If (MHJ.MPI6_ReadByte(Me.m_Handle, MHJ.SPSOperanden.DB, data.GetByte, Buffer, data.GetAnzahl, data.GetDB, ENr) = 0) Then
            MHJ.MPI_A_GetDLLError(Me.m_Handle, (ErrStr), ENr)
            Throw New SPSException(ENr, (String.Format("Fehler bei ReadBitValue. DB{0}.DBX{1}.{2}" & vbCrLf & "{3}", data.GetDB, data.GetByte, data.GetBit, ErrStr)))
        End If
        If (Buffer And 2 ^ data.GetBit) = 2 ^ data.GetBit Then
            Return True
        Else
            Return False
        End If
    End Function
Ronnie

Benutzeravatar
Weiss_MHJ
Site Admin
Beiträge: 636
Registriert: 13 Apr 2010, 16:34
Kontaktdaten:

Beitrag von Weiss_MHJ »

Hallo,

ich denke Sie sollten den ErrorString über
ErrorString = New String(Chr(0), 255)
deklarieren.
Zum Test können Sie die Funktion "MPI_A_GetDLLError" mit der Fehlernummer 509 aufrufen. Hier sollte dann der Fehlerstring "Kommunikationsfehler aufgetreten!" geliefert werden.

Gruss

ronnie.b
SPSTreff-User
Beiträge: 6
Registriert: 11 Jul 2010, 08:16
Wohnort: RLP

Beitrag von ronnie.b »

Hallo,
damit funktioniert es auch nicht. Ich hab herausgefunden das es an der Deklaration der API liegt.

So funktionierts:

Code: Alles auswählen

Declare Function MPI_A_GetDLLError _
Lib "mpia32_v60_vb.dll" (ByVal Handle_DLL As Integer, _
ByVal ErrorString As String, ByVal ErrorCode As UShort) As Integer
Was ist denn da der Unterschied zu

Code: Alles auswählen

<DllImport("mpia32_v60_vb.dll")> _
Public Shared Function MPI_A_GetDLLError(ByVal Handle As Integer, _
    ByVal ErrorString As String, ByVal ErrorCode As UShort) As Integer
End Function

Benutzeravatar
Weiss_MHJ
Site Admin
Beiträge: 636
Registriert: 13 Apr 2010, 16:34
Kontaktdaten:

Beitrag von Weiss_MHJ »

Hallo,

meines Wissens definiert man mit "shared" statische Methoden, damit hat man z.B. keinen Zugriff auf eine Instanz-Variable.

Vielleicht ist hier das Problem begründet.

Gruss

Antworten