में पाइथन ऑब्जेक्ट्स का उपयोग कर सी # से पाइथन ऑब्जेक्ट्स को कॉल करने का कोई आसान तरीका है, जो कि किसी भी COM mess के बिना है?सी #
सी #
उत्तर
आप इस post पर एक नज़र डाल सकते हैं।
हां, आयरनपीथन की मेजबानी करके।
सी # के वर्तमान रिलीज़ संस्करण में कुछ प्रकार की पुल परत का उपयोग किये बिना इसे हासिल करने का कोई शानदार तरीका नहीं है। आप इसे आयरनपीथन को एक डिग्री तक होस्ट कर सकते हैं लेकिन सी # के बाद से आयरनपीथन की गतिशील विशेषताओं का लाभ उठाना मुश्किल है क्योंकि यह बहुत ही स्थाई रूप से टाइप की गई भाषा है
यदि आप आयरनपीथन के बारे में बात कर रहे हैं, तो सी # 4.0 उस पर इंटरऑप करने में सक्षम होगा seemlessly। सी # 4.0 एक नई सुविधा कैलड गतिशील पेश कर रहा है जो इसे डीएलआर पर चल रही किसी भी भाषा के साथ काम करने की अनुमति देता है।
dynamic d = GetSomePythonObject();
d.SomeMethod();
मैं 3 तरीके के बारे में पता:
1) का प्रयोग करें आयरन अजगर, और अपने अजगर परियोजनाओं सी # में लिखा परियोजनाओं के साथ स्वतंत्र रूप से बातचीत कर सकते हैं।
2) अपने पायथन कार्यों को COM पर एक्सपोज़ करें। यदि आप पाइथन पुस्तकालयों का उपयोग करने की आवश्यकता है तो आप ऐसा करेंगे यदि आप आयरन पायथन (ईजी, यदि आपके पास अभी एक डीएलएल है) में कनवर्ट नहीं करना चाहते हैं। "COM mess" वास्तव में इतना बुरा नहीं है, अगर आपके पायथन कोड और सी # कोड एक ही मशीन पर चल रहे हैं। this tutorial से इस कोड से पता चलता है कि यह जरूरत से ज्यादा बदसूरत नहीं है:
class PythonUtilities:
_public_methods_ = [ 'SplitString' ]
_reg_progid_ = "PythonDemos.Utilities"
# NEVER copy the following ID
# Use "print pythoncom.CreateGuid()" to make a new one.
_reg_clsid_ = "{41E24E95-D45A-11D2-852C-204C4F4F5020}"
def SplitString(self, val, item=None):
import string
if item != None: item = str(item)
return string.split(str(val), item)
# Add code so that when this script is run by
# Python.exe, it self-registers.
if __name__=='__main__':
print "Registering COM server..."
import win32com.server.register
win32com.server.register.UseCommandLine(PythonUtilities)
3) सी # है और अजगर सॉकेट के माध्यम से संवाद। यदि आप कोड हैं तो आप आयरन पायथन में कनवर्ट नहीं कर सकते हैं और आपको इसे दूरस्थ रूप से एक्सेस करने की आवश्यकता है। इसके लिए सबसे अधिक काम की आवश्यकता है क्योंकि आपको तर्कों को मार्शल और अनर्मशॉल करने और बाइट्स या तारों से मूल्यों को वापस करने की आवश्यकता है, लेकिन यह मेरी एक टीम है जब हमें रिमोट पायथन प्रक्रिया में सी # बात करने की आवश्यकता होती है।