Hallo
Ich habe eine in C erstellte DLL von Burster um einen Drehmomentsensor auszulesen. Nun möchte ich einen Wrapper erstellen um die DLL aus vb.net anzusprechen. Bei einigen Funktionen funktioniert das schon recht gut, aber bei Funktionen mit einen Pointer auf ein Char-Array habe ich Mühe.
Die Beschreibung der Funktion lautet:
protHandle ist ein Integer und stellt kein Problem dar, aber die serialNumber ist wie folgt beschrieben:
Ich habe dann anhand dieses Artikels folgenden Code ausprobiert:
Ich bekomme aber einen Fehler bei Aufruf der Funktion und zwar:
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."
Kann mir jemand hier weiterhelfen?
Viele Grüsse Roland
Ich habe eine in C erstellte DLL von Burster um einen Drehmomentsensor auszulesen. Nun möchte ich einen Wrapper erstellen um die DLL aus vb.net anzusprechen. Bei einigen Funktionen funktioniert das schon recht gut, aber bei Funktionen mit einen Pointer auf ein Char-Array habe ich Mühe.
Die Beschreibung der Funktion lautet:
protHandle ist ein Integer und stellt kein Problem dar, aber die serialNumber ist wie folgt beschrieben:
??serialNumber??
Control Name: SerialNumber
Description: Serial number of the deviceVariable
Type: char array (pointer on char array)Length: max. 20 chars + termination
Ich habe dann anhand dieses Artikels folgenden Code ausprobiert:
VB.NET-Quellcode
- <DllImport("bp8661.dll", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi, ExactSpelling:=True)>
- Public Shared Function bp8661_GetSerialNr(ByVal portHandle As Integer, ByVal serialNumber As IntPtr) As Integer
- End Function
- Public Shared Function bp8661_GetSerialNr(ByVal portHandle As Integer) As String
- Dim serialNumberPointer As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(IntPtr.Zero))
- bp8661_GetSerialNr(portHandle, serialNumberPointer)
- Dim p0 As IntPtr
- p0 = Marshal.ReadIntPtr(serialNumberPointer)
- Return Marshal.PtrToStringAnsi(p0)
- End Function
Ich bekomme aber einen Fehler bei Aufruf der Funktion und zwar:
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."
Kann mir jemand hier weiterhelfen?
Viele Grüsse Roland