2012-11-21 16 views
5

में ओपनसीवी सी ++ कोड को कॉल करना मैंने एक सी ++ प्रोग्राम विकसित किया है जो ओपनसीवी का उपयोग करता है। अब मैं सी # में एक विंडोज़ फॉर्म आधारित एप्लीकेशन विकसित करना चाहता हूं। चूंकि सी # केवल प्रबंधित कोड को संभाल सकता है, सी # एप्लिकेशन पर ओपनसीवी को चलाने के लिए लगभग असंभव है। मैंने ओपनसीवी का उपयोग कर सी # एप्लिकेशन बनाने के विभिन्न तरीकों की खोज की है, जिनमें से एक एम्गुसीवी है और दूसरी विधि जिसे मैं अधिक दिलचस्पी लेता हूं, सी #+ में डी + फाइल। डीएल फाइल आयात कर रहा है और इस तरह से अप्रबंधित कार्यों को कॉल कर रहा है।सी # अनुप्रयोग

मैंने सी ++ में सरल कार्यों को बनाकर शुरू किया और मैं अपने सी # अनुप्रयोग में डीएल आयात करके cout और cin का उपयोग करने में सक्षम था। समस्या तब आती है जब मैं अपने C++ आवेदन में OpenCV हेडर फाइल शामिल करने के लिए कोशिश करते हैं और जब मैं संकलन मैं इस त्रुटि

त्रुटि LNK1104 मिलता है: फ़ाइल खोलने 'tbb_debug.lib'

कुछ एक नहीं किया है सकते हैं इस से पहले, लेकिन मैं नहीं कर सकते यह पता लगाने कैसे वह Displaying webcam feed in cv::Mat format in a picturebox

में साथ सी # ++ सी इंटरफेस प्रश्न मैं समारोह जो एक सीवी में ले जाता है :: चटाई चर और उस पर कुछ इमेज प्रोसेसिंग करता है और संसाधित मैट्रिक्स रिटर्न होता है। मैं अपने सी # अनुप्रयोग में सी ++ में लिखे गए उस फ़ंक्शन का उपयोग करना चाहता हूं। लेकिन समस्या यह है कि जब मैं सी ++ में ओपनसीवी लाइब्रेरी शामिल करता हूं तो मैं डीएलएल बनाने में असमर्थ हूं।

तो कृपया मुझे OpenCV के लिए EmguCV या किसी अन्य .NET wrappers का उपयोग करने के लिए सुझाव न दें।

मैं अपने प्रोजेक्ट के लिए विजुअल स्टूडियो 2010 का उपयोग कर रहा हूं।

+0

सवाल क्या है? आपने पहले से ही उल्लेख किया है कि आप एक डीएलएल बना सकते हैं और इसे पी/इनवॉक द्वारा एक्सेस कर सकते हैं। आप असेंबली लिखने के लिए सी ++/सीएलआई का भी उपयोग कर सकते हैं, जो देशी शीर्षकों तक पहुंचता है और देशी पुस्तकालयों का उपयोग करता है। लिंक त्रुटि के लिए, आपने हमें यह बताने के लिए पर्याप्त जानकारी प्रदान नहीं की है कि क्या गलत है। – Spook

+0

मैंने पोस्ट संपादित किया है, जब मैं ओपनसीवी का उपयोग करने वाली किसी भी विधि को लिखने का प्रयास करता हूं तो मुझे एक त्रुटि मिलती है जिसे मैंने ऊपर पोस्ट किया है, इसलिए डीएलएल नहीं बनाया जा सकता है, लेकिन जब मैंने केवल cout और cin का उपयोग किया तो कोई त्रुटि नहीं आई और डीएलएल को सफलतापूर्वक बनाया गया –

उत्तर

3

मैं स्पष्ट रूप से तरीकों कि एक सी ++ शीर्ष लेख में अपने प्रवेश बिंदुओं लपेट निर्यात होगा, और फिर का उपयोग पी/आह्वान उन्हें संदर्भित करने के लिए:

extern "C" __declspec(dllexport) BOOL DoSomething(); 

फिर उन्हें में सी # उपभोग:

[DllImport("MyOpenCVWrapper.dll")] 
private static extern bool DoSomething(); 

मैं ओपनसीवी हेडर का संदर्भ देने की कोशिश नहीं करता।

+0

आपको बहुत बहुत धन्यवाद। यह मेरी समस्या हल हो गई। –

1

हालांकि यह हो सकता है कि आप जो भी खोज रहे हों, मैंने उस कार्य को सी ++/सीएलआई के साथ किया और इसे एक असेंबली के माध्यम से उजागर किया। यह सीधे आगे था और बहुत अच्छी तरह से काम किया। Blog article here

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