Marshaling von struct LDewarp (Stern)(Stern)dewarp
Hallo Leute,
ich möchte für Leptonica einen .Net Wrapper schreiben (Leptonica.Net erweitern) und habe dabei Probleme mit dem Marshalen.
folgende Probleme bekomme ich nicht gelöst:
im Leptonica Quellcode steht als Struktur für ein Dewarp-Array (L_DewarpA):
soweit so gut ...
ich Marshale also (Marshal.PtrToStructure(PTR, Me))
Me = Klasse folgendermaßen definiert:
nalloc als integer
maxpage als Integer
Dewarp als IntPtr ' PTR des Arrays
den Pointer der Liste bekomme ich zurück ...
dann hole ich mir zum diesem PTR das Array:
In der Liste steht als Pointer 0 ' Somit kein PTR
wenn ich die Anzahl der zu kopierenden Einträge erweitere erhalte ich eine Liste von diversen Daten (teilweise andere Pointer)
Ich Teste immer mit den gleichen Daten und es hat (vielleicht wars Zufall) schon funktioniert im Debug, dann beim nächsten mal wieder nicht.
Verstehe ich mit den Pointern und dem Array etwas falsch?
wenn ich eine Klasse definiere kann es dann sein dass diese Alphabetisch anstatt in der
geschriebenen Reihenfolge abgearbeitet wird (Und ich somit den Pointer auf ein anderes Objekt bekomme)?
Der Link zu dem Projekt:
[LeptonicaSharp https://github.com/Phreak87/leptonicaSharp]
Vielen Dank im Voraus für die Antworten.
ich möchte für Leptonica einen .Net Wrapper schreiben (Leptonica.Net erweitern) und habe dabei Probleme mit dem Marshalen.
folgende Probleme bekomme ich nicht gelöst:
im Leptonica Quellcode steht als Struktur für ein Dewarp-Array (L_DewarpA):
l_int32 nalloc;
l_int32 maxpage;
struct L_Dewarp **dewarp; => Pointer zu Array von NAlloc(Anzahl) Pointern
...
soweit so gut ...
ich Marshale also (Marshal.PtrToStructure(PTR, Me))
Me = Klasse folgendermaßen definiert:
nalloc als integer
maxpage als Integer
Dewarp als IntPtr ' PTR des Arrays
den Pointer der Liste bekomme ich zurück ...
dann hole ich mir zum diesem PTR das Array:
Dim MS As New Marshaller(PTR)
Dim A(MS.NAlloc - 1) As IntPtr ' - Liste von IntPTR
Marshal.Copy(MS.PTR, A, 0, MS.Alloc) ' - Kopiere Inhalt des PTR nach A
Dim Dewas As New Collections.Generic.List(Of Dewarp) ' Liste als Return
For Each eintrag As IntPtr In A
If eintrag = 0 Then Continue For
Dewas.Add(New Dewarp(eintrag))
Next
In der Liste steht als Pointer 0 ' Somit kein PTR
wenn ich die Anzahl der zu kopierenden Einträge erweitere erhalte ich eine Liste von diversen Daten (teilweise andere Pointer)
Ich Teste immer mit den gleichen Daten und es hat (vielleicht wars Zufall) schon funktioniert im Debug, dann beim nächsten mal wieder nicht.
Verstehe ich mit den Pointern und dem Array etwas falsch?
wenn ich eine Klasse definiere kann es dann sein dass diese Alphabetisch anstatt in der
geschriebenen Reihenfolge abgearbeitet wird (Und ich somit den Pointer auf ein anderes Objekt bekomme)?
Der Link zu dem Projekt:
[LeptonicaSharp https://github.com/Phreak87/leptonicaSharp]
Vielen Dank im Voraus für die Antworten.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 383018
Url: https://administrator.de/forum/marshaling-von-struct-ldewarp-sternsterndewarp-383018.html
Ausgedruckt am: 22.12.2024 um 09:12 Uhr