सवाल यह है कि उसकी सी # समाधान के लिए अपने ही सी ++ कोड को एकीकृत करने के लिए, बस नहीं किस क्रम में उपयोग करने के लिए विशेषता स्पष्ट रूप से है Win32 API से मौजूदा फ़ंक्शन को कॉल करने के लिए। भले ही उत्तर पहले ही स्वीकार कर लिया गया हो, मुझे लगता है कि यह अपूर्ण है, और निम्नलिखित लागू होना चाहिए।
हां, यह उन मामलों में सामान्य प्रथा है जहां कार्य या तो तेजी से चल सकता है, कम संसाधनों का उपयोग कर सकता है, और कुछ मामलों में भी .net फ्रेमवर्क में उपलब्ध विधियों तक पहुंचने के लिए।
अपने लक्ष्य दक्षता आप एक देशी अप्रबंधित सी ++ पुस्तकालय कोड करने के लिए की जरूरत है हासिल करने के लिए है, तो आप एक नया अप्रबंधित सी ++ परियोजना (है कि एक dll पुस्तकालय के रूप में संकलित) दृश्य स्टूडियो और संदर्भ अपने सी # परियोजना से इस पुस्तकालय में पैदा करेगा ।
आपके मामले में ऐसा लगता है कि आप एक अप्रबंधित सी ++ लाइब्रेरी लिख रहे हैं, और निम्नलिखित लागू होते हैं।
किसी भी तत्काल मुद्दे के लिए आप के बारे में पूछ रहे थे, इससे परिनियोजन और अपवित्रता प्रभावित होगी।
परिनियोजन: ध्यान रखें कि सी # DLLs आप किसी भी सीपीयू पर चलेगा निर्माण, दोनों 32 और 64 बिट, लेकिन इस नए देशी और अप्रबंधित सी ++ पुस्तकालय अपने कार्यक्रम के लिए बाध्य करेगा होने के लिए या तो 32 के लिए या 64 विशिष्ट।
यह आपके दृश्य स्टूडियो विन्यास प्रबंधक में कुछ आप कॉन्फ़िगर जाएगा है, और संकलन समय का ध्यान रखा जाना होगा, आप, सी # विधानसभाओं के लिए और अपने नए अप्रबंधित सी ++ पुस्तकालय के लिए AnyCPU ले जाएगा, जिसमें हो जाएगा यह अपनी परियोजना है, Win32 या x64 से चुनने के लिए आपके पास होगा।
तो अब 2 सेटअप होगा, यह सबसे अच्छा अभ्यास की सिफारिश की अलग व्यवस्था, 32 के लिए एक और 64 के लिए या 32 बिट के बाद से समर्थन बहुत तेजी से गिर रही है एक और एक है करने के लिए है, तो आप 64 बिट पर ध्यान केंद्रित कर सके केवल।
इसके अलावा, आपकी लाइब्रेरी विजुअल स्टूडियो द्वारा प्रदान किए गए वीसी ++ रेडिस्टिब्यूटेबल को संदर्भित कर सकती है, जिसे आपको अपनी तैनाती में शामिल करना पड़ सकता है, हालांकि इसमें से कुछ संस्करण कई ओएस पर शामिल हैं, मुझे लगता है कि यह शायद ही कभी संकलित है साथ ही यह सुनिश्चित करने के लिए अपने आवेदन के साथ इसे तैनात करना सबसे अच्छा है। यदि यह पैक गुम है, तो लक्ष्य मशीन में eventviewer-> एप्लिकेशन लॉग में SideBySide अपवाद होगा।
अप्रबंधित कोड से निकाले गए अपवाद को पकड़ने और संभालने के लिए, केवल एक ही पकड़ जो काम करता है वह खाली है, जिसे कैच() के बाद कोष्ठक में कोई अपवाद प्रकार नहीं है। इसलिए यदि आप एक .net प्रकार जैसे कैच (अपवाद) डालते हैं, तो आप अप्रबंधित कोड के अंदर से हटाए गए सभी अप्रबंधित अपवादों को संभालने के लिए अपनी कॉल को अप्रबंधित कोड में लपेट सकते हैं, यह केवल उस पर कूद जाएगा। एक अप्रबंधित अपवाद को पकड़ने का एकमात्र तरीका, प्रबंधित कोड के अंदर इस प्रारूप में है।
try
{
//call unmanaged code
}
catch
{
//handle unmanaged exception
}
- कहानियो: कोई भी पद्धति जो अब बुला रहे हैं अप्रबंधित कोड सी # से किया कॉल अब स्वचालित रूप से नाम बदलने से बाहर रखा जाएगा। और दूसरा पहलू पर, अपने अप्रबंधित सी ++ पुस्तकालय की जरूरत है अपने प्रबंधित विधानसभाओं से तरीकों कॉल करने के लिए, उन आदेश सी ++ पुस्तकालय उन्हें बुला को दिखाई करने के लिए, का नाम बदलने के लिए, मैन्युअल से बाहर रखा होने की आवश्यकता होगी।
आपको क्या चाहिए केवल Windows लोगों की तरह अच्छी तरह से ज्ञात सी ++ पुस्तकालयों कॉल करने के लिए है, तो आप एक नया अप्रबंधित सी ++ प्रोजेक्ट बनाने के लिए की जरूरत नहीं होगी ही पिछले एक जवाब में उपयोग [DllImport()] सुझाव विशेषता। और इस मामले में आप एक बार देख इस संदर्भ में http://www.pinvoke.net/
क्या वह .NET के लिए विज्ञापन है? क्रॉस-प्लेटफार्म संगतता, कनेक्शन समस्याएं, सीखने की अवस्था इत्यादि के बारे में क्या? –
सीखना वक्र? मुझे लगता है कि भाषाओं को गठबंधन करने की कोशिश करते समय आप सी ++ और सी # दोनों की मूल बातें जानते हैं। क्रॉस प्लेटफॉर्म? सी ++ में यह स्पष्ट लेखन क्रॉस प्लेटफ़ॉर्म कोड बहुत कठिन है, लेकिन संभव है। सी # के साथ संयुक्त होने पर भी थोड़ा आसान लगता है - एक उच्च स्तरीय कोड तय कर सकता है कि कौन सी सी/सी ++ भागों को लोड करने और विशिष्ट प्लेटफॉर्म पर उपयोग करने के लिए उपयोग किया जाता है। – Harry
@ हैरी: जब आप मुझे दिखाते हैं तो मैं आपका जवाब स्वीकार करूंगा (उदा।) सी # एक पीआईसी पर काम कर रहा है ;-) –