2010-10-29 12 views
7

मैं लिनक्स में एक पायथन लिपि लिख रहा हूं, और शराब में उपलब्ध कुछ विंडोज़ कार्यों को कॉल करने की आवश्यकता है। विशेष रूप से, AllocateAndInitializeSid और LookupAccountSidW, यह निर्धारित करने के लिए कि दूरस्थ विंडोज कंप्यूटर में कौन लॉग इन है। ये फ़ंक्शन advapi32.dll in Wine (संपादित करें का उपयोग कर रहे हैं: उत्तरों का उपयोग करके, मैं फ़ंक्शन को कॉल करने में सक्षम था, लेकिन LookupAccountSidW केवल स्थानीय कंप्यूटर पर काम करता है)।लिनक्स पर पाइथन से शराब डीएल कैसे कॉल करें?

मैं इन कार्यों, या शराब डीएल सामान्य रूप से कैसे एक्सेस कर सकता हूं? मैं

>>> cdll.LoadLibrary("~/.wine/drive_c/windows/system32/advapi32.dll") 

की कोशिश की है, लेकिन यह एक त्रुटि में परिणाम है:

 
OSError: ~/.wine/drive_c/windows/system32/advapi32.dll: invalid ELF header 

एक और ctypes समारोह है कि काम करेंगे, या मैं इस्तेमाल कर सकते हैं कुछ शराब इंटरफ़ेस है?

+0

क्या आपने 'windll' की कोशिश की है? –

उत्तर

5

क्या शराब डीएलएस के *.so संस्करण प्रदान नहीं करता है? मुझे लगता है कि उदाहरण के लिए, /usr/lib32/wine/advapi32.dll.so है।

यदि आप 64-बिट मशीन पर हैं, तो ध्यान रखें कि 32-बिट पुस्तकालयों को लोड करने के लिए आपको Python के 32-बिट संस्करण की आवश्यकता होगी।

+0

धन्यवाद, यह काम करता है! मेरे लिए यह वास्तव में '/ usr/lib/wine/advapi32.dll.so' पर था। – Justin

+3

उत्सुकता के लिए, मुझे वास्तव में केवल शराब के अंदर चलने वाले पायथन और विंडल का उपयोग करने के लिए कॉल मिल गया। लॉड लाइब्रेरी, जाहिर है। एसओ फ़ाइल stdcall कॉलिंग कन्वेंशन का उपयोग करती है, जो ctypes (cdll) के लिनक्स संस्करण में प्रकट नहीं होती है। – Justin

0

समझें कि डीएलएल विंडोज द्वारा उपयोग किया जाने वाला प्रारूप है।

linux पर, इस तरह के पुस्तकालयों .तो

के साथ समाप्त आप लाइब्रेरी एक दूसरे पर एक मंच के लिए संकलित उपयोग नहीं कर सकते। यह संगत नहीं है।

+3

गलत। ओएनसी कर सकते हैं –

+1

मेरा मतलब है ** मूल रूप से **, * निक्स विंडोज डीएलएल का समर्थन नहीं करता है। लेकिन मुझे आपकी टिप्पणी से दिलचस्पी है, कृपया एक संदर्भ प्रदान करें। – karlphillip

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