Guten Tag Community
Ich hab vor ein paar Tage diesen Thread entdeckt die ich als Grundlage nutze. Und jetzt versuche ich schon eine Weile eine ganz normale Array an die C-Dll zu übergeben (und wieder zurück). Vielleicht kann mir jemand einen Tip geben, wie ich da vorgehen muss.
Mir wäre eventuell auch schon mit einem sehr guten Tut zum Thema Marhelling geholfen, in dem einige gute Beispiele vorhanden sind. Vorzugsweise auf Deutsch.
Für die Hilfe danke ich.
Freundliche Grüsse
exc-jdbi
PS.
Ich habe diese Anfrage in einem anderen Forum schon gestellt, und leider keine Antwort bekommen. Ich hoffe das ich hier Antwort bekomme. Sorry für mein Vorgehen.
Auch möchte ich noch erwähnen das ich eine Lösung habe, in dem ich
- String-Array in einen String umgewandelt habe, und so an die DLL übergeben
- In der DLL den String wieder in eine Array umgewandelt habe.
Ich erhoffe mir jedoch noch eine bessere / weitere Lösung zum Vorgehen hier zu bekommen.
Ich hab vor ein paar Tage diesen Thread entdeckt die ich als Grundlage nutze. Und jetzt versuche ich schon eine Weile eine ganz normale Array an die C-Dll zu übergeben (und wieder zurück). Vielleicht kann mir jemand einen Tip geben, wie ich da vorgehen muss.
Mir wäre eventuell auch schon mit einem sehr guten Tut zum Thema Marhelling geholfen, in dem einige gute Beispiele vorhanden sind. Vorzugsweise auf Deutsch.
VB.NET-Quellcode
- Module Module1
- Sub Main()
- Dim p3, p4 As IntPtr
- Dim strBack As String = String.Empty
- Dim chArr(,) As Char = {}
- Dim strArrBack() As String = {}
- Dim strArr() As String = New String() {"Ich", "bin", "eine", "Array"}
- Try
- chArr = New Char(strArr.Length - 1, 256 - 1) {}
- For i As Integer = 0 To strArr.Length - 1
- For j As Integer = 0 To strArr(i).Length - 1
- chArr(i, j) = strArr(i)(j)
- Next
- Next
- 'p3 = Marshal.AllocHGlobal(Marshal.SizeOf(chArr.GetValue(chArr.GetLowerBound(0), chArr.GetLowerBound(1))))
- 'Marshal.StructureToPtr(chArr.GetValue(chArr.GetLowerBound(0), chArr.GetLowerBound(1)), p3, True)
- p4 = Marshal.AllocHGlobal(Marshal.SizeOf(IntPtr.Zero))
- If (dll.Test2(p3, p4, chArr.GetUpperBound(0) + 1) <> 0) Then
- Dim p0 As IntPtr = Nothing
- p0 = Marshal.ReadIntPtr(p4)
- strBack = Marshal.PtrToStringAnsi(p0)
- End If
- Finally
- Marshal.FreeHGlobal(p1)
- Marshal.FreeHGlobal(p3)
- End Try
- End Sub
- End Module
Für die Hilfe danke ich.
Freundliche Grüsse
exc-jdbi
PS.
Ich habe diese Anfrage in einem anderen Forum schon gestellt, und leider keine Antwort bekommen. Ich hoffe das ich hier Antwort bekomme. Sorry für mein Vorgehen.
Auch möchte ich noch erwähnen das ich eine Lösung habe, in dem ich
- String-Array in einen String umgewandelt habe, und so an die DLL übergeben
- In der DLL den String wieder in eine Array umgewandelt habe.
Ich erhoffe mir jedoch noch eine bessere / weitere Lösung zum Vorgehen hier zu bekommen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()