2012-04-26 11 views
6

मैं किसी तृतीय पक्ष लिस्प-आधारित प्रोग्राम (चलिए इसे एबीसी कहते हैं) और एक सी # प्रोग्राम के बीच एकीकरण बनाने की कोशिश कर रहा हूं जिसे मैंने स्वयं लिखा है (चलिए इसे डीईएफ कहते हैं)। समस्या यह है कि एबीसी केवल सी या फोरट्रान में बनाई गई असेंबली को कॉल कर सकता है। तो मैंने सी सीखना शुरू किया, और मुझे काम करने के लिए "हैलो वर्ल्ड" परीक्षण मिला, जहां एबीसी ने मेरे सी डीएल को फोन किया और बदले में "हैलो वर्ल्ड" प्राप्त किया। मैंने स्पष्ट लोडिंग और GetProcAddress का उपयोग कर सी कोड से अपने डीईएफ डीएल को कॉल करने का प्रयास किया। यह काम करता है अगर मैंने एक और सी डीएल कहा, लेकिन सी # डीएल नहीं। अब मुझे आश्चर्य है कि अगर मैं सी ++ जानने के लिए और सी से सी # कॉल करना होगा ++ यह अच्छा कॉल श्रृंखला बनाने के लिए:मैं अपने सी कोड से सी # डीएल में विधियों को कैसे कॉल करूं?

एबीसी -> सी -> सी ++ -> डीईएफ़ (सी #) -> सी ++ -> सी -> एबीसी

यदि यह एकमात्र तरीका है, तो क्या कोई मुझे कुछ उदाहरणों आदि में मदद कर सकता है?

+1

क्या आपने COM इंटरॉप के लिए अपना सी # डीएल पंजीकृत किया था? मैंने इसे अतीत में किया है, यह संभव है। – SouthShoreAK

+0

अपने प्रश्न का उत्तर देने के लिए मत भूलना अगर यह है (उत्तर के डाउनवोट बटन के नीचे हुक की जांच करें)। – sschrass

उत्तर

2

देशी प्रविष्टि बिंदुओं के रूप में सी # कार्यों को निर्यात करने के लिए this project का उपयोग करें।

+0

मुझे वास्तव में यह काम करने के लिए मिला, बहुत बहुत धन्यवाद! – AndersJH

3

जब आप .NET असेंबली बनाते हैं, तो आप COM इंटरऑप के लिए पंजीकृत असेंबली रखने के लिए चेकबॉक्स सेट कर सकते हैं। यह आपको COM को कॉल करने वाली किसी भी भाषा से तक पहुंचने की अनुमति देगा। (सी यह नहीं कर सकता है? से लंबे समय तक मैंने सी या सी ++ को छुआ।)

कॉन्फ़िगरेशन गुण -> अपनी प्रोजेक्ट गुणों का पृष्ठ बनाएं। "COM इंटरॉप के लिए रजिस्टर" की तलाश करें।

+0

यह काम नहीं किया। सी अभी भी डीएलएल में प्रक्रिया पता नहीं मिल सकता है। – AndersJH

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