2011-01-04 4 views
7

मुझे पुरानी बोर्लैंड कंपाइलर (बीसी 5) का उपयोग करके सी में लिखे गए पुराने ऐप का समर्थन करना होगा।पुराने बोर्लैंड सी में एक दृश्य सी ++ डीएलएल का उपयोग करना?

दुर्भाग्यवश पुरानी टीसीपी/आईपी लाइब्रेरी जिसका हम उपयोग करेंगे, उसकी उम्र दिखाना शुरू हो रहा है और Vista & Win7 मशीनों के साथ समस्याएं आ रही हैं।

मैं एमएस विज़ुअल सी के लिए ++ उपलब्ध कार्यों के एक नए पुस्तकालय है, और मुझे लगता है कि उपयोग करने के लिए एक DLL कि Borland सी

तो से प्रतिदेय होगा करना चाहते हैं, मैं 2 मुद्दे हैं: 1) एक बोर्लैंड सी प्रोग्राम से कॉल करने योग्य दृश्य सी ++ डीएलएल कैसे बनाएं, और 2) यदि यह कॉल करने योग्य है, तो सी ++ फ़ंक्शंस को सादे पुराने सी से कैसे कॉल करें?

आदर्श रूप से, पूरी परियोजना को विज़ुअल सी में परिवर्तित किया जाना चाहिए, लेकिन वहां कई विरासत सुविधाएं हैं जो इस परियोजना को एक प्रमुख उपक्रम बनाती हैं! मैं थोड़ी देर के लंबे समय तक :)

स्टीव

+0

क्या आपके पास अभी भी बोर्लैंड सी कंपाइलर है? यदि ऐसा है तो आप ऐप और लाइब्रेरी के बीच संपर्क क्षेत्र को कम करने का प्रयास कर सकते हैं। –

उत्तर

6

के लिए यह जीवित रखने के लिए एक त्वरित पैच के लिए देख रहा हूँ एक DLL विजुअल C++ कि के रूप में विंडोज STDCALL सी कार्यों इसके इंटरफेस को उजागर करता है का उपयोग कर लिखें। विंडोज एपीआई फ़ंक्शन समान रूप से किए जाते हैं। इंटरफ़ेस में आपके द्वारा सामने आने वाले कार्यों को आपके प्रोग्राम में प्रतिस्थापित करने के लिए आवश्यक कार्यों को निष्पादित किया जाएगा। डीएलएल के अंदर, छोड़कर नए एमएस वीसी ++ लाइब्रेरी को कॉल करें।

extern "C" int __stdcall foo();

आप भी DLL से समारोह निर्यात करने के लिए जानकारी दर्ज करनी होगी:

तो एक समारोह है कि सी से प्रतिदेय है और का उपयोग करता है STDCALL ढेर प्रोटोकॉल कुछ इस तरह कर पाने के लिए। आप इस तरह के रूप में घोषणा में स्पष्ट रूप से यह कर सकता है:

extern "C" __declspec(dllexport) int __stdcall foo();

लेकिन आप अपने BorlandC कोड में उपयोग के लिए एक अलग हेडर फाइल (जो शायद DLL आयात हिस्सा है और STDCALL निर्दिष्ट करने के लिए अलग अलग वाक्यविन्यास है की आवश्यकता होगी अंश)।

extern "C" __declspec(dllimport) int __stdcall foo();

2

आप बोर्लेन्ड के IMPLIB उपयोगिता के साथ Borland OMF आयात libaries बना सकते हैं:: IMPLIB-एक "whatever.omf" "whatever.dll दृश्य C++ में घोषणा आप ग्राहक में उपयोग करना चाहते हैं कुछ ऐसा दिखाई देगा ", जहां डीएलएल फ़ाइल एमएसवीसी द्वारा बनाई गई है।

द-ए विकल्प माइक्रोसॉफ्ट संगतता के लिए है। उत्पन्न ओएमएफ (बोर्लैंड की आयात लाइब्रेरी फ़ाइल प्रारूप), एक हेडर फ़ाइल के साथ संयुक्त है जो निर्यात किए गए कार्यों और उनके कॉलिंग कन्वेंशन को निर्दिष्ट करता है ... (मेरा मानना ​​है कि IMPLIB सी ++ बिल्डर 5 में था।)

http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devwin32/implib_xml.html

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