से कॉल करता हूं तो मैं सी ++ फ़ंक्शंस में तर्क कैसे पास करूं, इसलिए, मैं एक C++ dll से फ़ंक्शंस कॉल करने में सक्षम होना चाहता हूं। कुछ कारणों से, मैं उन्हें अपने सी ++ कोड में __asm ब्लॉक से कॉल करना चाहता हूं। मेरा प्रश्न यह है: मैं जानता हूँ कि इससे पहले कि मैं फ़ंक्शन को कॉल करें, मैं समारोह के बुला convention.However द्वारा निर्दिष्ट क्रम में स्टैक पर अपने तर्कों पुश करने के लिए है, मैं बस कुछ इस तरह कर सकते हैं:जब मैं उन्हें इनलाइन असेंबली
int a=5;
double b = 5.0;
__asm{
push b
push a
call functionAddress
}
मुझे चिंता है कि मुझे यह याद आ रहा है कि मुझे याद है कि असेंबली में मानक शब्द का आकार 2bytes है, जबकि सी ++ में int का आकार आमतौर पर 4bytes और 8 बाइट्स डबल के लिए होता है। इसलिए, ऊपर दिए गए उदाहरण में, क्या मैं वास्तव में प्रत्येक चर के पूर्ण मूल्य, या केवल बाइट्स के पहले जोड़े को धक्का दे रहा है? यदि उपरोक्त कोड सही नहीं है, तो ऐसा करने का सही तरीका क्या होगा? साथ ही, यदि हम जिस फ़ंक्शन को कॉल कर रहे हैं वह दोहरा देता है, तो यह मान कहां संग्रहीत किया जाता है? मुझे लगता है कि यह एक रजिस्टर में नहीं हो सकता है, क्योंकि यह केवल 32 बिट्स (4 बाइट्स) स्टोर कर सकता है। इस गड़बड़ी के साथ कोई भी मदद की सराहना की जाएगी :)
जब आपने इसे आजमाया तो क्या हुआ? – Seth
मुझे युगल के साथ समस्या हो रही है: मैंने खुद को डीएलएल में एक टेस्ट फ़ंक्शन बनाया है जो डबल तर्क लेता है और यदि इनपुट 5.0 से बड़ा है तो यह 1 लौटाता है। बात यह है कि मैंने समारोह को असेंबली से कुछ बार कॉल करने का प्रयास किया तर्क 7.45454 के साथ और वापसी मूल्य हमेशा एक जैसा नहीं है। –