2009-07-29 13 views
13

में सी # डीएल का उपयोग कैसे करें मैंने सी # का उपयोग करके एक डीएल बनाया है। IronPython में डीएलएल का उपयोग कैसे करें। मैंने clr.AddReference ("yxz.dll") का उपयोग कर डीएलएल जोड़ने की कोशिश की है। लेकिन यह विफल रहता है। मैंने आयरनपीथन लिपि की निष्पादन निर्देशिका में डीएल को रखने का प्रयास किया है। फिर भी यह बताता है कि डीएलएल को संदर्भित करने का प्रयास करते समय "नाम xyz नहीं मिला"।IronPython

+1

क्या होता है यदि आप लाइन को clr.AddReference ("yxz") में बदलते हैं, तो इससे कोई फर्क पड़ता है? –

+0

यदि समस्या यह है कि डीएलएल नहीं मिल पा रहा है, तो गलत क्या है, यह निर्धारित करने के लिए Sysinternals द्वारा प्रोसेस मॉनीटर का उपयोग करें। –

+1

fuslogvw.exe यह भी पता लगाने का एक अच्छा तरीका है कि एक प्रबंधित DLL क्यों नहीं मिला - यह w/प्लेटफॉर्म एसडीके आता है। –

उत्तर

8

मुझे लगता है कि यह फ़ाइल को ढूंढने में असफल रहा है क्योंकि यह नहीं जानता कि इसे कहां देखना है, here देखें कि विस्तृत विवरण के लिए clr.AddReference ...() फ़ंक्शन कैसे काम करता है।

2

Creating .NET Classes Dynamically from IronPython उदाहरण, एक असेंबली बनाता है (जिसे बाद में "DynamicAsm.dll" के रूप में डिस्क में सहेजा जाता है)। इसमें 'DynamicType "नामक एक कक्षा शामिल है, जिसमें' test 'नामक एक स्थिर विधि है। यह विधि चार पूर्णांक लेती है और उन्हें एक साथ जोड़ती है।

The nice thing is that this saves "DynamicAsm.dll" to disk. You can then start an IronPython interactive interpreter session and do the following :

>>> import clr 
>>> clr.AddReference('DynamicAsm.dll') 
>>> import DynamicType 
>>> DynamicType.test(2, 3, 4, 5) 
14 

ध्यान दें कि उदाहरण import बयान में वर्ग के नाम उपयोग करता है।

+2

'आयात sys प्रिंट sys का उपयोग करें।पथ 'कहां निर्धारित करें कि clr.AddReference dlls की तलाश में है – mydogisbox

+0

क्या मैं वास्तव में बाहर से ऐसा कर सकता हूं? या क्या मुझे वास्तव में क्लियर आयात करना है और मेरी आयरनपीथन लिपि में असेंबली का संदर्भ जोड़ना है? मुझे यहां कुछ असेंबली मिली हैं जिन्हें मैं स्थिर रूप से आयात करना चाहता हूं ताकि वे हमेशा लिपि में उपलब्ध हों। –

8
import clr  
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll") 

टिप्पणियों में जेफ द्वारा प्रस्तावित सबसे आसान तरीका है। यह भी काम करता है:

import clr 
import sys 

sys.path.append(r"C:\Folder\Subfolder") # path of dll 
clr.AddReference ("Ipytest.dll") # the dll 
import TestNamspace # import namespace from Ipytest.dll 
+3

आप 'clr.AddReferenceToFileAndPath' का भी उपयोग कर सकते हैं, जो वास्तव में ऐसा करता है। –

+0

मुझे यह व्यवहार केवल आयरनपीथन कंसोल से मिलता है। जब मैं एक स्क्रिप्ट चलाता हूं तो यह ठीक है। जब मैं आयरनपीथन की एक स्क्रिप्ट चलाता हूं, तो 'sys.path' में मेरी वर्तमान कार्यशील निर्देशिका का एक पूर्ण पथ होता है, इसलिए यह काम करता है। जब मैं कंसोल में टाइप करता हूं, तो 'sys.path' में केवल वर्तमान कार्य निर्देशिका के लिए' '' 'होता है। यह व्यवहार में अंतर की व्याख्या कर सकता है। –

+0

मैंने कोशिश की, लेकिन एक त्रुटि हो रही है: विशेषता त्रुटि: 'मॉड्यूल' ऑब्जेक्ट में कोई विशेषता नहीं है 'AddReferenceToFileAndPath' – Avis

0

आप इस का उपयोग कर सकते हैं:

import clr 
clr.AddReferenceToFile("yxz.dll") 
0

यह clr.AddReferenceToFile (फ़ाइल का नाम) उपयोग करना बेहतर है, क्योंकि यह एक रिश्तेदार पथ लेता है।

import clr 
clr.AddReferenceToFile("xxx.dll") 

तो फिर तुम हमेशा की तरह आयात से कक्षाएं आयात कर सकते हैं:

import xxx 

या

from xxx import * 

मेरा सुझाव है कि आप इस पुस्तक की जाँच करने के लिए, यह बहुत उपयोगी है। https://play.google.com/store/apps/details?id=com.gavin.gbook

+0

AddReferenceToFileAndPath सापेक्ष निर्देशिका पथ, fwiw के साथ भी काम करता है। – EdwardGarson

0

मुझे यह व्यवहार केवल आयरनपीथन कंसोल से मिला है। जब मैं एक स्क्रिप्ट चलाता हूं तो यह ठीक है। जब मैं आयरनपीथन की एक स्क्रिप्ट चलाता हूं, sys.path में मेरी वर्तमान कार्यशील निर्देशिका के लिए एक पूर्ण पथ होता है, इसलिए यह काम करता है। जब मैं कंसोल में टाइप करता हूं, sys.path में केवल '।' शामिल होता है वर्तमान कार्य निर्देशिका के लिए। यह व्यवहार में अंतर की व्याख्या कर सकता है।

एक hacky समाधान का एक सा है, मैं तो मैं ऊपर इस फाइल का निरपेक्ष पथ के साथ एक वातावरण चर IRONPYTHONSTARTUP सेट

"""This hacky script fixes the sys.path when I run the ipy console.""" 

import sys 
import os 

sys.path.insert(0, os.getcwd()) 

del sys 
del os 

fixpath.py एक फ़ाइल बना। फिर जब भी मैं अपना आयरनपीथन कंसोल शुरू करता हूं, यह स्क्रिप्ट चलाया जाता है और मेरा sys.path में मेरी वर्तमान कार्यशील निर्देशिका का पूर्ण संदर्भ शामिल है और बाद में कॉल clr.AddReference ठीक से काम करता है।

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