Ich muss ein Blob-Feld aus einer Datenbank in eine c # -App lesen.
Das Blob-Feld wurde jedoch von einer Delphi-App mit der folgenden Methode in die Datenbank geschrieben:
%Vor%Die in die Datenbank geschriebene Struktur ist keine einfache Struktur und enthält Dinge wie
%Vor%oder schlimmer, einige von ihnen enthalten
%Vor%Ich habe versucht, die Bytes aus der Datenbank einzulesen und dann
zu verwenden %Vor%um es in die Struktur zu verschieben
My Struct ist wie folgt definiert:
%Vor%Aber ich bekomme einen Fehler beim Aufruf von Marshal.PtrToStructure ():
Feld kann nicht gemarshallt werden 'ArrayofFixedLengthStrings' vom Typ 'MyBlobField': Ungültig verwaltete / nicht verwaltete Typkombination (String [] muss mit einem gepaart sein ArraySubType von LPStr, LPWStr, BStr oder LPTStr).
Ich habe mich gefragt, ob es ein Attribut gibt, das ich in einem CustomMarshaler definieren könnte, das eine Paarung mit einem String []
akzeptieren würdeIrgendwelche Ideen, wie ich den Inhalt des Blobs in c # lesen könnte?
Ich habe es herausgefunden ...
Deklarierte eine Struktur String20 als
%Vor%Offensichtlich ist der Zeichenfolgengrößenbezeichner am Anfang einer Zeichenfolge fester Länge (d. h. ein Delphi ShortString) nur 1 Byte. Dann änderte die Definition von header_identifiers zu:
%Vor%Außerdem wurde festgestellt, dass Delphi Packed Boolean als
umgewandelt werden muss %Vor%Mein erster Kommentar ist, dass die "String [80]" eine Zeichenfolge mit fester Länge ist (die in einer Struktur einfacher zu handhaben sein sollte), und in C # versuchen Sie, sie in eine "String []" einzufügen - Das ist eigentlich eine Referenz (Zeiger) auf eine Zeichenfolge.
Mein nächster Kommentar ist, dass Sie im schlimmsten Fall versuchen könnten, ihn in ein Array von Bytes zu lesen, die benötigten Bytes herauszuziehen und sie in die Zielstruktur zu manipulieren.
Tags und Links arrays c# delphi struct marshalling