हां नाम मैंगलिंग 32 और 64 बिट के बीच अलग है। सटीक प्रारूपों को कवर करने वाला एक उचित आलेख found here हो सकता है। आप बड़े अंतरों को बहुत तेज़ी से बता सकते हैं, हालांकि, दोनों लक्ष्यों को संकलित करना और परिणामस्वरूप मानचित्र फ़ाइलों की जांच करना। मेरे अनुभव से वे लगभग समान (64 बिट एक छोटा डाटाम जोड़ता है, संभावित रूप से दूसरों को बदलता है)।
सरल नमूना: void foo();
32bit: [email protected]@@QAEXXZ
64bit: [email protected]@@QEAAXXZ
गैर घायल एसटीडी कॉल के लिए, लंबाई प्रत्यय, काफी अलग हो सकता है पैरामीटर ढेर उपयोग के आधार पर। वीसी ++ के लिए डिफ़ॉल्ट 64-बिट सेटिंग्स अंडरस्कोर प्रीपेड नहीं करती हैं और न ही यह लंबाई-प्रत्यय को एन्कोड करता है। निम्नलिखित शुद्ध आउट-ऑफ-द-बॉक्स सेटिंग्स के साथ दोनों 32/64 बिट कॉन्फ़िगरेशन संकलित किया गया था:
extern "C" int _stdcall func2(int, int, char*);
32bit: [email protected]
64bit: func2
ज्यादा वहाँ बिंदु, वहाँ है।
सर्किट पूर्ण कर रहा है, unmangled _cdecl, जो करता है यह:
extern "C" int _cdecl func2(int, int, char*);
32bit: _func2
64bit: func2
तो ऐसा लगता है जैसे वे तुम्हें पता है कि तुम क्या खींच-इन कर रहे हैं या करने के लिए निर्यात बाहर अपने रास्ते से हट गया था, सबूत से पता चलता आप शायद सही हैं।
यह वास्तव में काफी अलग हो सकता है ... यदि 'टेस्ट' को तीन पॉइंटर पैरामीटर प्राप्त होते हैं तो यह '12' से' 24' तक बदल जाएगा ... आह, यह भी एक C++ फ़ंक्शन नहीं है। ऐसा लगता है कि एक 'stdcall' सी समारोह है। – ybungalobill
मैं इसके बारे में कहां से सीख सकता हूं। मैं इन अवधारणाओं में नया हूं। मुझे भी लगता है कि मेरा एक स्टडकॉल है और आपने जो उदाहरण दिया है वह सीडीसीएल के लिए है। मेरे पास #pragma टिप्पणी (लिंकर, "/ निर्यात: परीक्षण @ 0 = परीक्षण" जैसी कुछ अन्य कॉल हैं) मुझे उन्हें कैसे बदलना चाहिए। इनको स्पष्ट करने वाला एक संदर्भ महान होगा। – user1612986
सी ++ नाम मैंगलिंग पर कई दस्तावेज हैं (मैंने आपको उनमें से एक जोड़ा है)। आप अपने निर्यात के लिए बाहरी "सी" _stdcall का उपयोग कर रहे हैं, जो ऊपर दिखाए गए अनुसार 32.vs.64-bit में भिन्न हैं। एमएस और विकी में सचमुच लेख हैं। हालांकि वीबी से संबंधित, मुझे [यह पोस्ट] पसंद है (http://msdn.microsoft.com/en-us/library/dt232c9t (v = vs.71) .aspx) क्योंकि यह इसके बारे में बात करने का एक अच्छा काम करता है। एक तरफ या दूसरा, हालांकि, आपको अपने #pragmas को #ifdef WIN64 पर साफ़ करना होगा और या तो उपयुक्त नाम आयात या निर्यात करना होगा, मुझे डर है। – WhozCraig