अगर मैंक्या कोई जानता है कि विज़ुअल सी ++ में मैन्युअल रूप से नामों को कैसे जोड़ना है?
void foo(int c, char v);
... मेरी .obj में की तरह एक ग में एक समारोह है, यह
_foo
नाम के एक प्रतीक बन ... प्रति सी नाम नियम mangling के रूप में। यदि मेरे पास .cpp फ़ाइल में एक समान कार्य है, तो यह कंपाइलर-विशिष्ट नाम मैंगलिंग नियमों के अनुसार पूरी तरह से कुछ और बन जाता है। MSVC 12 हमें दे देंगे इस:
[email protected]@[email protected]
अगर मैं .cpp फ़ाइल में है कि समारोह foo है और मैं यह सी नाम नियम mangling उपयोग करने के लिए (यह मानते हुए मैं अधिक भार के बिना कर सकते हैं) चाहते हैं, हम यह
के रूप में घोषणा कर सकते हैंextern "C" void foo(int c, char v);
... जो मामले में, हम अच्छे पुराने
_foo
को वापस आ गए हैं ... .obj प्रतीक तालिका में।
मेरा सवाल है, क्या यह दूसरी तरफ जाना संभव है? अगर मैं सी ++ नाम को सी फंक्शन के साथ जोड़ना चाहता हूं, तो यह जीसीसी के साथ आसान होगा क्योंकि जीसीसी के नाम मैंगलिंग नियम केवल पहचानकर्ता-अनुकूल पात्रों का उपयोग करते हैं, इस प्रकार foo का उलझन नाम _ZN3fooEic बन जाता है, और हम आसानी से
लिख सकते हैंvoid ZN3fooEic(int c, char v);
माइक्रोसॉफ्ट संकलक-भूमि में वापस, मैं स्पष्ट रूप से एक समारोह जिसका नाम एक पूरी तरह से अमान्य पहचानकर्ता
void [email protected]@[email protected](int c, char v);
कहा जाता है नहीं बना सकते ... लेकिन मैं अभी भी उस समारोह की तरह साथ दिखाने के लिए चाहते हैं .obj प्रतीक तालिका में उस प्रतीक का नाम।
कोई विचार? मैंने विजुअल सी ++ के समर्थित प्रागम्स को देखा है, और मुझे कुछ भी उपयोगी नहीं दिख रहा है।
@mustafagonul मैं demangle की कोशिश नहीं कर रहा हूँ - मैं वध करने के लिए कोशिश कर रहा हूँ। –
भले ही आप ऐसा कर सकें, आपको किसी भी तरह से एबीआई से मेल खाना पड़ेगा। आप इस पर गलत पेड़ भड़क रहे हैं। इसके लिए बाहरी "सी" का प्रयोग करें और सीमाएं स्वीकार करें। – xaxxon
@ mustafagonul आप इसे काफी समझ नहीं रहे हैं। मुझे पता है कि उलझन और उलझन वाला नाम क्या है। मैं एक सी फाइल में नकली सी ++ नाम मैंगलिंग करना चाहता हूँ। –