2010-01-17 14 views
15

हम सी # विधियों को कैसे निर्यात कर सकते हैं?सी # विधियों को कैसे निर्यात करें?

मेरे पास एक डीएल है और मैं पाइथन भाषा में ctypes मॉड्यूल के साथ अपने तरीकों का उपयोग करना चाहता हूं। क्योंकि मुझे ctypes मॉड्यूल का उपयोग करने की आवश्यकता है, इसलिए मुझे पाइथन में दिखाई देने के लिए सी # विधियों को निर्यात करने की आवश्यकता है।

तो, मैं सी # विधियों को निर्यात कैसे कर सकता हूं (जैसे वे सी ++ में करते हैं)?

+1

आयरनपीथन का उपयोग क्यों नहीं करें? –

+0

प्रोफेसर का "ऑर्डर" –

+0

python.net पाइथन सी-एपीआई और .NET पिनवोक और अप्रबंधित निर्यात का उपयोग करके पाइथन और .NET के बीच द्वि-दिशात्मक इंटरऑप की अनुमति देता है। तो सभी कठिन टुकड़े आपके लिए लिखे गए हैं! http://pythonnet.github.io/ – denfromufa

उत्तर

22

लोकप्रिय धारणा के विपरीत, यह संभव है।
here देखें।

+1

मैंने dllexp.exe का उपयोग किया था जो सी # डीएल से निर्यात किए गए तरीकों को देखने के लिए किया गया था जो टेम्पलेट बनाता है और यह विधि को प्रकट नहीं करता है .. क्या dllexp.exe जैसे प्रोग्राम में C# dll विधियों को बाहरी रूप से दिखाई देने का कोई तरीका है ? उत्तर के लिए –

+0

tks;) –

1

सामान्य पायथन कार्यान्वयन ("सीपीथन") के साथ, आप कम से कम सीधे नहीं कर सकते हैं।

आप C++/CLI का उपयोग करके हमारे सी # विधियों के आसपास देशी सी रैपर लिख सकते हैं, और इन रैपर को पायथन से कॉल कर सकते हैं।

या, आप IronPython आज़मा सकते हैं। यह आपको किसी भी .Net भाषा में पाइथन कोड और कॉल कोड चलाने देता है, जिसमें सी # शामिल है।

+1

मैं पाइथन का उपयोग करना चाहता हूं और इसके अलावा आयरनपीथन जैसे अतिरिक्त कार्यान्वयन नहीं करना चाहता हूं। –

1

(यह नहीं रह गया SLaks के बाद से प्रासंगिक हो सकता है कि सरल लिंक मिल गया है, लेकिन मैं संदर्भ के लिए एक संपादित संस्करण छोड़ देंगे ...)

को नेट/सी # वस्तुओं को उजागर "सामान्य" तरीका अप्रबंधित कोड (जैसे पायथन) सी # डीएलएल (.NET असेंबली) के लिए एक COM-Callable wrapper बनाना है, और कॉल करें कि पायथन के COM/OLE समर्थन का उपयोग करें। COM-Callable wrapper बनाने के लिए, tlbexp और/या regasm कमांड-लाइन उपयोगिताओं का उपयोग करें।

जाहिर है, हालांकि, यह सी/डीएलएल-स्टाइल एपीआई प्रदान नहीं करता है जो स्लैक्स का लिंक करता है।

+1

दरअसल, यह संभव है। मेरा जवाब देखें – SLaks

1

यह संभव नहीं है। यदि आपको डीएलएल निर्यात की आवश्यकता है तो आपको सी ++/सीएलआई भाषा का उपयोग करने की आवश्यकता होगी। उदाहरण के लिए:

public ref class Class1 { 
public: 
    static int add(int a, int b) { 
     return a + b; 
    } 
}; 

extern "C" __declspec(dllexport) 
int add(int a, int b) { 
    return Class1::add(a, b); 
} 

कक्षा सी # में भी लिखी जा सकती है। सी ++/सीएलआई कंपाइलर निर्यात के लिए एक विशेष थंक उत्सर्जित करता है जो सुनिश्चित करता है कि सीएलआर लोड हो गया है और निष्पादन मोड में निष्पादन स्विच हो जाता है। यह बिल्कुल तेज़ नहीं है।

लेखन [सी # में कॉमविज़िबल (सत्य)] कोड एक और संभावना है।

+1

दरअसल, यह संभव है। मेरा जवाब देखें – SLaks

+1

मेह, न तो लेख और न ही डाउनलोड करने योग्य स्रोत कोड बताता है कि यह कैसे काम करता है। मैं ओपी से पुष्टि के लिए इंतजार करूंगा। –

+0

मुझे ctypes मॉड्यूल का सही उपयोग करने के लिए एक रैपर सी ++ डीएल (सी # डीएल का) बनाना था! –

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