2011-06-13 33 views
8

मैं विंडोज 7, 64-बिट का उपयोग कर रहा के माध्यम से। मैंने पाइथननेट डाउनलोड और स्थापित करने में कामयाब रहा है, इसलिएका प्रयोग सी # विधानसभाओं pythonnet

import clr 
clr.AddReference("System.Windows.Forms") 
from System.Windows.Forms import Form 

ठीक काम करता है। मैंने एक सी # एप्लिकेशन भी डाउनलोड और संकलित/चलाया है जो कई असेंबली बनाता है। प्रश्न में आवेदन ARDrone-Control-.NET है।

मैं कैसे अजगर से उत्पन्न DLL फ़ाइलों का उपयोग कर सकते हैं (और नहीं बस में निर्मित सी # वर्ग)।

जब से मैं सी # इस्तेमाल नहीं किया है (जिसके कारण मैं अजगर से पुस्तकालय का उपयोग करना चाहते हैं), मैं प्रश्न को स्पष्ट करने में खुशी होगी।

+1

ऐसा लगता है कि आप अनावश्यक घर्षण का एक बहुत हो रही है। क्या आपने इस परियोजना के लिए आयरन पायथन का उपयोग करने पर विचार किया है? –

+0

आयरनपीथन बहुत स्थिर है, लेकिन एमएस द्वारा खुले जाने के बाद विकास बहुत धीमा हो गया। CPython बहुत ही स्थिर है और शक्तिशाली सी एपीआई, numpy, Cython, पांडा, आदि के द्वारा प्रयोग किया गया है .. – denfromufa

उत्तर

3

मैं क्या इकट्ठा आप Python.Net में एक बाहरी विधानसभा लोड करने के लिए कोशिश कर रहे हैं से, मुझे लगता है कि पुस्तकालय के साथ थोड़ा काम किया है। आप Python.Net आप इस

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:42:59) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import clr 
>>> from System.Reflection import Assembly 
>>> dll1 = Assembly.LoadFile("C:\Python\Python27-32\Lib\site-packages\Python.Runtime.dll") 
>>> clr.Python.Runtime 
<module 'Python.Runtime'> 
>>> clr.Python.Runtime.PythonEngine 
<class 'Python.Runtime.PythonEngine'> 
+1

IronPython दुर्भाग्य से एक विकल्प नहीं है, क्योंकि अन्य एक्सटेंशन पैकेज के लिए ढेर केवल CPython के साथ काम करते हैं। – Petter

+0

प्रदान किया गया उदाहरण python.net – mitchellsg

+0

ठीक से काम करना चाहिए, धन्यवाद! 1.2.3.4। – Petter

11

की तरह नेट के प्रतिबिंब के माध्यम से विधानसभा लोड कर सकता है बस एक और तरीका प्रदान करने के बजाय IronPython का उपयोग कर, लेकिन उपयोग करने पर विचार करना चाहिए:

import sys 
sys.path.append("C:\Path\to\your\assemblies") 

clr.AddReference('MyAssembly') 
from MyAssembly import MyClass 

MyClass.does_something() 

मतलब यह है कि C:\Path\to\your\assemblies फ़ोल्डर में आप एक MyAssembly.dll फ़ाइल है।

तो 'चाल' यह है कि आपको अपने असेंबली फ़ोल्डर को sys.path पर clr.AddReference से पहले जोड़ना होगा।

+0

मुझे आयात करने से पहले sys.path में असेंबली निर्देशिका जोड़नी पड़ी। मुझे नहीं पता कि यह हालिया है, या मेरी मशीन के साथ एक विसंगति है - लेकिन यदि यह महत्वपूर्ण है, तो शायद इसे यहां ध्यान दिया जाना चाहिए। – Tritium21

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