कल्पना कीजिए कि आप एक प्रोग्राम लिखना चाहते हैं जो एक C++ dll फ़ाइल में फ़ंक्शंस का परीक्षण करता है। आपको उपयोगकर्ता को एक डीएलएल चुनने में सक्षम होना चाहिए (हम मानते हैं कि हम सी ++ डीएलएस के बारे में बात कर रहे हैं)। वह डीएल द्वारा निर्यात किए गए सभी कार्यों की एक सूची प्राप्त करने में सक्षम होना चाहिए। फिर, उपयोगकर्ता सूची से फ़ंक्शन नाम चुनने में सक्षम होना चाहिए, मैन्युअल रूप से तर्कों की एक सूची इनपुट करें (तर्क सभी मूल प्रकार हैं, जैसे int, double, bool या char arrays (जैसे c-type स्ट्रिंग्स)) और प्रयास निर्दिष्ट तर्क के साथ चयनित फ़ंक्शन को चलाने के लिए। वह जानना चाहता है कि फ़ंक्शन निर्दिष्ट तर्कों के साथ चलता है या नहीं, तो वे इसे क्रैश कर देते हैं (क्योंकि वे उदाहरण के लिए हस्ताक्षर से मेल नहीं खाते हैं)।क्या मैं सी ++ डीएल द्वारा उपयोग किए जाने वाले कॉलिंग सम्मेलन को प्रोग्रामिक रूप से कम कर सकता हूं?
मुख्य समस्या यह है कि सी ++, दृढ़ता से टाइप की गई भाषा होने के कारण, आपको संकलन समय पर फ़ंक्शन कॉल के लिए तर्कों की संख्या और प्रकार जानने की आवश्यकता होती है। और मेरे मामले में, मुझे बस यह नहीं पता कि ये तर्क क्या हैं हैं, जब तक कि उपयोगकर्ता उन्हें रनटाइम पर नहीं चुनता।
एकमात्र समाधान मैं के साथ आया था, विधानसभा उपयोग करने के लिए मैन्युअल रूप से कॉल स्टैक पर बहस पुश करने के लिए किया गया था।
हालांकि, मुझे यह समझाया गया है कि अगर मैं विधानसभा के साथ गड़बड़ करना चाहते हैं, मैं बेहतर लानत यकीन है कि मुझे पता है कि जो बुला सम्मेलन dll में फ़ंक्शन का उपयोग कर रहे हैं चाहते हैं आए हैं।
तो (अंत में :) यहाँ मेरे सवाल है: मैं बुला सम्मेलन programmaticaly यह मान सकते हैं? निर्भरता वॉकर मेरी मदद नहीं करेगा, और मुझे नहीं पता कि पीई प्रारूप को मैन्युअल रूप से कैसे पढ़ा जाए।
आपके पास उपयोगकर्ता को कॉलिंग सम्मेलन क्यों निर्दिष्ट नहीं किया गया है? Stdcall के लिए डिफ़ॉल्ट (जो कि इन दिनों माइक्रोसॉफ्ट कंपाइलर्स द्वारा उत्पन्न डीएलएस पर है), लेकिन उपयोगकर्ता को इसे बदलने की अनुमति देता है। –
ठीक है, डर्न.मैंने बस इसके बारे में सोचा नहीं था! मुझे यह जांचना है कि क्या मुझे ऐसा करने की इजाजत है, लेकिन यदि मैं हूं, तो यह एक वैध कामकाज होगा :)) –