में पैक किए गए रिकॉर्ड के भीतर फिक्स्ड साइज्ड स्ट्रिंग्स के डेल्फी ऐरे को कैसे पढ़ा जाए, मुझे डेटाबेस से एक सी # ऐप में ब्लॉब फ़ील्ड पढ़ने की जरूरत है।सी #
हालांकि ब्लॉब क्षेत्र निम्न विधि का उपयोग कर एक डेल्फी अनुप्रयोग से डेटाबेस के लिए लिखा गया था:
procedure WriteABlob(Blob : TBlobField; var Buffer; size : integer);
var
s : String;
begin
setlength(s,size);
move(buffer,s[1],Size);
Blob.Value := S;
end;
संरचना डेटाबेस के लिए लिखा एक सरल संरचना नहीं है और
MyVariable : Array[0..3] of String[80];
तरह बातें शामिल हैं
या इससे भी बदतर उनमें से कुछ
MyRecord = Packed Record
case byte of
1: (
iValue:Integer;
)
2: (
cValue:Char;
)
end;
मैं कोशिश कर रहा हूं डेटाबेस से बाइट में eading और फिर
Marshal.PtrToStructure()
का उपयोग कर के क्रम में यह struct
मेरे struct के रूप में परिभाषित किया गया है में स्थानांतरित करने के लिए इस प्रकार है:
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi, Pack = 1, Size = 10710)]
public struct MyBlobField
{
...
[MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.AnsiBStr,SizeConst = SpecificArraySize)]
public String[] ArrayofFixedLengthStrings;
...
}
लेकिन जब बुला मैं कोई त्रुटि मिलती है Marshal.PtrToStructure():
नहीं किया जा सकता मार्शल क्षेत्र प्रकारके 'ArrayofFixedLengthStrings''MyBlobField': अमान्य प्रबंधित/अप्रबंधित प्रकार संयोजन (स्ट्रिंग [] को LPStr, LPWStr, BStr या LPTStr के ArraySubType के साथ जोड़ा जाना चाहिए)।
मैं अगर वहाँ था सोच रहा था एक विशेषता मैं एक CustomMarshaler पर निर्धारित कर सकते हैं जो एक String []
कोई भी विचार कैसे मैं सी # में ब्लॉब की सामग्री को पढ़ सकता है के साथ एक जोड़ी को स्वीकार करेंगे?
डाली जा करने की जरूरत है यह वास्तव में एक AnsiBstr और नहीं एक नियमित रूप से BSTR (अर्थात यूनिकोड) है। यह बहुत गैर मानक है। –
डेल्फी के पुराने संस्करण (डी 2007 समेत) यूनिकोड के बजाए अंसी पर मानकीकृत। –