phreak87
Goto Top

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):
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.

Content-ID: 383018

Url: https://administrator.de/contentid/383018

Ausgedruckt am: 20.11.2024 um 00:11 Uhr