[VB.NET] managed Structure zu unmanaged marsheln



  • Hi @ all

    Problem:
    Habe VisualStudion 2005 und ein VB.net Projekt. Darin befindet sich nun eine Struktur.

    private structure Dump
    dim M() as byte
    dim I() as byte
    dim S as string
    dim T as integer
    end structure

    Sodala, erzeuge nun eine Instanz (dim haufen as dump) dieser Struktur in einer meiner Funktionen, ReDim die Größen der Bytearrays, füll alles mit Inhalt und übergebe die gesamte Struktur einer ALTEN FUNKTION, die in UNMANAGED CODE geschrieben wurde.

    Jetzt müsste ich die Instanz vorher marsheln (also von managed code in unmanaged code umwandeln) Allerdings erkennt die Marshal Funktion die Byte Arrays nicht und liefert mir bei marshal.sizeof(haufen) auch falsche Werte.

    Kann mir jemand helfen?? PLS!!!!



  • Dieser Thread wurde von Moderator/in Marc++us aus dem Forum Rund um die Programmierung in das Forum C# und .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich kann dir leider nur in C# weiterhelfen, aber im Prinzip müsste es in VB.net ähnlich funktionieren.
    Wenn du Arrays marshalen willst, musst du vorher die Größe des Arrays angeben.
    In C# geschieht das über ein Attribut:

    [MarshalAs(UnmanagedType.ByValArray, SizeConst=5)]
    byte[] b;
    

    And dieser Stelle wird jetzt davon ausgegangen, dass ein ByteArray mit der Länge 5 verwendet wird. Wenn du die Größe vorher nicht weist, fällt mir eigentlich nur noch Handarbeit ein (oder unsicheren code zulassen, hab ich aber noch nie probiert und kann deshalb auch nichts dazu sagen).
    Du musst die Struktur selbst Byte für Byte durchlaufen und damit ein byteArray füllen. Dieses Byte Array bekommst du dann mit Marshal.Copy(...) unmanaged - und rückwärts genau gleich - Den Pointer Byte für Byte auslesen und damit die Struktur füllen.


Anmelden zum Antworten