2015-07-01 8 views
6

मैं पाया है पुस्तकालयों कि निर्यात होता रूप अप्रबंधित कामयाब कोड ताकि आप सी/सी की तरह ++ अप्रबंधित भाषाओं से इसका इस्तेमाल कर सकते हैं। लेकिन मुझे कुछ भी नहीं मिला जो यह समझाएगा कि यह कैसे किया जाता है (जो मुझे अधिक दिलचस्पी है)सी # अप्रबंधित dll निर्यात (यह कैसे काम करता)

मैं जानकारी, ट्यूटोरियल, लेख, कोड स्रोत या कुछ भी ढूंढ रहा हूं जो यह समझने में मेरी मदद कर सकता है

काम करता है एक तरफ ध्यान दें, यदि आप अपने बुकमार्क में कुछ हुक/detours संसाधनों पाया मैं पहले से उन्हें भी पढ़ने के लिए प्यार होता :)

धन्यवाद और एक अद्भुत दिन है।

+0

यह एक है: https://www.nuget.org/packages/UnmanagedExports, प्रलेखन https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports – xanatos

+2

जो मेरा पहला शब्द था, मैंने उस पुस्तकालय को पाया, इसके बारे में सब कुछ पढ़ा और अभी भी मुझे कोई जगह नहीं मिली है, मैं इस बिंदु पर पूरी तरह से समझना चाहता हूं कि मैं अपना खुद का – user3761832

+1

लिख सकता हूं, आपने वास्तव में कभी नहीं कहा ** ** ** लाइब्रेरी आपको मिली! – MrPaulch

उत्तर

5

मैं एक टिप्पणी पोस्ट करूंगा, जो मैंने लिखी टिप्पणियां एकत्रित की है।

ऐसा करने के लिए सबसे प्रसिद्ध लाइब्रेरी (आज के रूप में) UnmanagedExports है। इसका पृष्ठ https://sites.google.com/site/robertgiesecke/Home/uploads/unmanagedexports है। अफसोस की बात है कि कोई स्रोत कोड उपलब्ध नहीं है, लेकिन इसे एमआईटी लाइसेंस के तहत लाइसेंस प्राप्त है, इसलिए शायद इसे देखने के लिए IlSpy का उपयोग करना ठीक है।

यह कैसे किया जाता है इसके बारे में कुछ संदर्भ हैं।

कोडप्रोजेक्ट पर कम से कम दो लेख हैं: How to Automate Exporting .NET Function to Unmanaged Programs जो .NET 2.0 और Unmanaged code can wrap managed methods के लिए प्रतीत होता है जो दुख की बात है .NET 1.1।

कुछ 384

आप निश्चित रूप से एक और बात कर सकते हैं पेज आसपास पुस्तक Expert .NET 2.0 IL Assembler में संदर्भ नहीं है: निरीक्षण क्या करना UnmanagedExports: अंत में UnmanagedExports दो भागों से "सुगठित" है: एक विधानसभा RGiesecke.DllExport.Metadata.dll युक्त एक " बेवकूफ "विशेषता DllExportAttribute प्लस दो असेंबली (कि मेरे कंप्यूटर पर पैकेज \ unmanagedExports.1.2.6 \ tools फ़ोल्डर में nuget इंस्टॉल करता है): RGiesecke.DllExport.dll और RGiesecke.DllExport.MSBuild.dll

<Import Project="packages/UnmanagedExports.1.2.6/tools/RGiesecke.DllExport.targets" Condition="Exists('packages/UnmanagedExports.1.2.6/tools/RGiesecke.DllExport.targets')" /> 

उस वर्ग RGiesecke.DllExport.MSBuild.DllExportAppDomainIsolatedTask विधानसभा RGiesecke.DllExport.MSBuild.dll में निहित के निष्पादन का कारण: UnmanagedExports की nuget संस्थापक की तरह, csproj करने के लिए कुछ लाइनों कहते हैं। Mono.Cecil का उपयोग करके यह कक्षा, कुछ कोड रीविविंग करने वाले असेंबली को फिर से लिखती है। यह प्रोग्राम आईएल कोड स्रोत उत्पन्न करने के लिए बस ildasm पर कॉल करता है, आईएल कोड स्रोत को संशोधित करता है और फिर "मूल" .dll/.exe उत्पन्न करने के लिए ilasm का उपयोग करता है। तो सीधे शब्दों में, दो विधानसभाओं, <Import /> बाहर टिप्पणी की साथ <Import /> के साथ एक और एक अन्य उत्पन्न है, तो एक

ildasm yourdll.dll /out=source.il 
दोनों फ़ाइलों के

करते हैं और अपने पसंदीदा फ़ाइल comparer के साथ तुलना।

एक और दिलचस्प लिंक here है। X64 पर काम करने के तरीके के बारे में कुछ टिप्पणियां हैं।

अगर मुझे ऐसा कुछ बनाना पड़ा, तो शायद मैं इसे Fody पर एकीकृत करने का प्रयास करूंगा। इस तरह से मेरा पूरा पोस्ट-बिल्ड टास्क मुफ्त में होगा (क्योंकि यह फोडी द्वारा किया जाता है)

Mono.Cecil के साथ नहीं किया जा सकता ...Mono.Cecil मिश्रित मोड असेंबली नहीं लिख सकता (जो प्रतीकों को निर्यात करने के लिए आवश्यक हैं)। आपको UnmanagedExports (और कई अन्य उदाहरणों द्वारा) द्वारा उपयोग की जाने वाली "चाल" का उपयोग करना होगा ... आईएल फ़ाइल जेनरेट करें, इसे संशोधित करें (यह एक निश्चित प्रारूप में एक टेक्स्ट फ़ाइल है ... संशोधित करने में काफी आसान है), फिर से -dll/.exe उत्पन्न करें।

https://github.com/3F/DllExport

अप्रबंधित निर्यात C++/CLI संकलक रिवर्स PInvoke के लिए करना है क्या अनिवार्य रूप से कर रही हो गया है:

+1

IKVM.Reflection यह कर सकते हैं। http://weblog.ikvm.net/PermaLink.aspx?guid=aeaa0190-2b32-45e6-a249-3c3cf126372b – user423430

+0

@ user423430 हाँ :-) – xanatos

+1

अब एक फॉलोअप/कांटा उपलब्ध है, जो खुला स्रोत है: https://github.com/3F/DllExport/ –

4

यहाँ GitHub पर बनाए रखा अप्रबंधित निर्यात का स्रोत कोड है।

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