BennyBookworm
Grünschnabel
Hallo allseits,
im Moment erstelle ich eine Oberfläche welche die Daten einer Messstation ausgibt.
Die Schnitstelle wird in Form einer C- DLL geliefert.
Einige Funktionen erwarten einen Char* als Übergabeparameter.
Bsp.:
long __stdcall psrGetNamenAllerMesswerte (char *pzNamen)
pzNamen ist Zeigt auf einen String in der die länge 10* Anzahlwerte haben muss und mit
den Namen der Werte gefüllt wird.
Es ist mir jedoch nicht möglich eine Funktion die einen *Char als Parameter erwartet aufzurufen da ich eine Speicherschutzverletzung bekomme.
Bsp.:
<DllImport("ProsumSrDLL.dll", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi, throwonunmappablechar:=True)> _
Public Shared Function psrGetNamenAllerMesswerte (<[In](), Out(), MarshalAs(UnmanagedType.LPArray)> ByVal namen() As System.Char) As Int32
End Function
Ich habe hierbei schon iniges versucht... LBARRAY von Char() , IntPtr von Char()/String/Stringbuilder, LBStr (auch wenns eigentlich nicht passt) oder das Manuelle Freigeben von Speicher über Marshal.AllocCoTaskMem() und Marshal.AllocHGlobal() jedoch bekomme ich IMMER eine Speicherschutzverletzung.
Habt ihr vielleicht die Lösung, oder einen Tip in welcher Ecke das Problem zu finden ist?
Danke im Vorraus
Benny
im Moment erstelle ich eine Oberfläche welche die Daten einer Messstation ausgibt.
Die Schnitstelle wird in Form einer C- DLL geliefert.
Einige Funktionen erwarten einen Char* als Übergabeparameter.
Bsp.:
long __stdcall psrGetNamenAllerMesswerte (char *pzNamen)
pzNamen ist Zeigt auf einen String in der die länge 10* Anzahlwerte haben muss und mit
den Namen der Werte gefüllt wird.
Es ist mir jedoch nicht möglich eine Funktion die einen *Char als Parameter erwartet aufzurufen da ich eine Speicherschutzverletzung bekomme.
Bsp.:
<DllImport("ProsumSrDLL.dll", CallingConvention:=CallingConvention.Cdecl, CharSet:=CharSet.Ansi, throwonunmappablechar:=True)> _
Public Shared Function psrGetNamenAllerMesswerte (<[In](), Out(), MarshalAs(UnmanagedType.LPArray)> ByVal namen() As System.Char) As Int32
End Function
Ich habe hierbei schon iniges versucht... LBARRAY von Char() , IntPtr von Char()/String/Stringbuilder, LBStr (auch wenns eigentlich nicht passt) oder das Manuelle Freigeben von Speicher über Marshal.AllocCoTaskMem() und Marshal.AllocHGlobal() jedoch bekomme ich IMMER eine Speicherschutzverletzung.
Habt ihr vielleicht die Lösung, oder einen Tip in welcher Ecke das Problem zu finden ist?
Danke im Vorraus
Benny