2011-10-15 15 views
6

के बीच टीवीरडाटा मतभेद मुझे x64 में टीवीरडाटा के बारे में कोई स्पष्टीकरण नहीं मिला। सहायता में एक पृष्ठ है लेकिन ऐसा लगता है कि x64 में टीवीरडाटा और x86 में टीवीरडेटा अलग हैं। वास्तव में मैं x64 लक्ष्य के लिए डीएचएचएल संकलित करने की कोशिश कर रहा हूं। (स्रोत TVarData है)x86 और x64 डेल्फी

Big := TBigCardinalVarData(Source).BigCardinalPtr^; 

और TBigCardinalVarData यहाँ है:

TBigCardinalVarData = packed record 
    VType: TVarType; 
    Reserved1, Reserved2, Reserved3: Word; 
    BigCardinalPtr: PBigCardinal; 
    Reserved4: LongWord; 
end; 

यह 86 में संकलित है, लेकिन यह 64 में संकलित करने के लिए मना कर दिया लेकिन यह "अवैध समान किरदार" इस ​​लाइन पर कहते हैं। मुझे लगता है कि समस्या वर्ड और लॉन्गवर्ड्स चर में है। लेकिन मैं इसे अभी तक नहीं समझ सका।

उत्तर

12

समस्या packed record घोषणा है, पैक किया गया रिकॉर्ड प्रकार X64 में रिकॉर्ड प्रकार बनता है, इसलिए आपको घोषणा में "पैक किए गए रिकॉर्ड" से "पैक" को हटाना होगा और इसके बजाय ALIGN निर्देश का उपयोग करना होगा।

{$ALIGN 8} 
TBigCardinalVarData = record 
    VType: TVarType; 
    Reserved1, Reserved2, Reserved3: Word; 
    BigCardinalPtr: PBigCardinal; 
    Reserved4: LongWord; 
end; 
अधिक जानकारी के लिए

, इन प्रविष्टियों

+0

सही पढ़ा धन्यवाद। :) – oruchreis

+0

मैंने '{$ IFDEF CPUX64} {$ ALIGN 8} {$ ENDIF} TBigIntegerVarData = {$ IFDEF CPUX86} पैक किया है {$ ENDIF} रिकॉर्ड ' – oruchreis

संबंधित मुद्दे