Ich muss ein Blob-Feld aus einer Datenbank in eine C# -App lesen.Wie man ein Delphi-Array mit festen Größen innerhalb eines gepackten Datensatzes in C#
jedoch das BLOB-Feld in der Datenbank durch eine Delphi App geschrieben wurde die folgende Methode verwendet:
procedure WriteABlob(Blob : TBlobField; var Buffer; size : integer);
var
s : String;
begin
setlength(s,size);
move(buffer,s[1],Size);
Blob.Value := S;
end;
Die Struktur in die Datenbank geschrieben ist keine einfache Struktur und enthält Dinge wie
MyVariable : Array[0..3] of String[80];
oder schlechter einige von ihnen enthalten
MyRecord = Packed Record
case byte of
1: (
iValue:Integer;
)
2: (
cValue:Char;
)
end;
Ich habe versucht r eading in dem Bytes aus der Datenbank und dann
Marshal.PtrToStructure()
, um mit zu bewegen, in die Struktur
Meine Struct ist wie folgt definiert:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1, Size = 10710)]
public struct MyBlobField
{
...
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.AnsiBStr,SizeConst = SpecificArraySize)]
public String[] ArrayofFixedLengthStrings;
...
}
Aber ich erhalte eine Fehlermeldung beim Aufruf Marshal.PtrToStructure():
kann nicht Marschall Feld 'ArrayofFixedLengthStrings' vonTyp'MyBlobField': Ungültige verwaltete/nicht verwaltete Typkombination (String [] muss mit einem ArraySubType von LPStr, LPWStr, BStr oder LPTStr gepaart werden).
Ich habe mich gefragt, ob es ein Attribut war ich auf einem Custom definieren könnte, die die Verbindung mit einem String akzeptieren würde []
Irgendwelche Ideen, wie ich den Inhalt des Blobs in C# lesen konnte?
gegossen werden müssen, ist es wirklich ein AnsiBstr und kein reguläres Bstr (das heißt Unicode). Das ist ziemlich nicht Standard. –
Ältere Versionen von Delphi (einschließlich D2007) standardisiert auf Ansi anstelle von Unicode. –