2011-03-09 13 views
13

मैं पाइथन में WinDLL कैसे आयात करूं और अपने सभी कार्यों का उपयोग करने में सक्षम हूं? इसे केवल युगल और तारों की आवश्यकता है।पायथन आयात डीएल

+0

क्या कैसे यह काम नहीं करता आप अब तक की क्या ज़रूरत है, और:

using System; using RGiesecke.DllExport; using System.Runtime.InteropServices; public class MyClassName { [DllExport("MyFunctionName",CallingConvention = CallingConvention.Cdecl)] [return: MarshalAs(UnmanagedType.LPWStr)] public static string MyFunctionName([MarshalAs(UnmanagedType.LPWStr)] string iString) { return "hello world i'm " + iString } } 

3) आपका अजगर कोड इस तरह है? –

+0

इस प्रश्न के साथ डुप्लिकेट करें? http://stackoverflow.com/questions/252417/how-can-i-use-a-dll-from-python – payne

उत्तर

13

आपने प्रश्न ctypes पर टैग किया है और ऐसा लगता है कि आप पहले ही जवाब जानते हैं।

ctypes tutorial उत्कृष्ट है। एक बार जब आप पढ़ लें और समझ लें कि आप इसे आसानी से कर पाएंगे।

उदाहरण के लिए:

>>> from ctypes import * 
>>> windll.kernel32.GetModuleHandleW(0) 
486539264 

और अपने खुद के कोड से एक उदाहरण:

lib = ctypes.WinDLL('mylibrary.dll') 
#lib = ctypes.WinDLL('full/path/to/mylibrary.dll') 
func = lib['myFunc']#my func is double myFunc(double); 
func.restype = ctypes.c_double 
value = func(ctypes.c_double(42.0)) 
+0

ठीक है, मुझे पता था कि मुझे ctypes की आवश्यकता है, लेकिन मुझे नहीं पता था कि उनका उपयोग कैसे किया जाए। :) इसके अलावा, बहुत अच्छा लिंक! पाइथन दस्तावेज केवल संदर्भ के लिए अच्छा लगता है, लेकिन वास्तविक शिक्षा नहीं। अनेक अनेक धन्यवाद! – pajm

+0

रुको! मुझे लगता है कि मैंने आपके कोड को अनदेखा किया है। ट्यूटोरियल को देखने के बाद, ऐसा लगता है कि विंडोज़ डीएलएल कैसे लोड करें। मुझे एक कस्टम डीएलएल फ़ाइल लोड करने की जरूरत है। यह मैं कैसे करूंगा? – pajm

+0

@ पैट्रिक मैंने एक और उदाहरण जोड़ा है। लेकिन यह सब ट्यूटोरियल में है। अपने स्वयं के डीएलएल और विंडोज डीएलएल को कॉल करने के बीच कोई सैद्धांतिक अंतर नहीं है। –

2

डीएलएल तक पहुंचने के लिए, और उनके लिए पाइथन बाइंडिंग उत्पन्न करने के लिए Cython का उपयोग करें।

3

मैं अपने अनुभव पोस्टिंग कर रहा हूँ। सबसे पहले सभी कड़ी मेहनत के बावजूद मुझे सभी टुकड़ों को एक साथ रखने के लिए, सी # डीएल आयात करना आसान है। जिस तरह से मैंने किया है:

1) इस nuget पैकेज को स्थापित करें (मैं मालिक नहीं हूँ, बस बहुत उपयोगी है) के लिए एक अप्रबंधित dll का निर्माण करने में: https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports

2) आपका सी # dll कोड की तरह है इस:

import ctypes 
#Here you load the dll into python 
MyDllObject = ctypes.cdll.LoadLibrary("C:\\My\\Path\\To\\MyDLL.dll") 
#it's important to assing the function to an object 
MyFunctionObject = MyDllObject.MyFunctionName 
#define the types that your C# function return 
MyFunctionObject.restype = ctypes.c_wchar_p 
#define the types that your C# function will use as arguments 
MyFunctionObject.argtypes = [ctypes.c_wchar_p] 
#That's it now you can test it 
print(MyFunctionObject("Python Message")) 
संबंधित मुद्दे