जेनरेट सी कोड से डीएलएल लाइब्रेरी बनाना

मेरे पास एक नियंत्रण समस्या है जिसे मैंने मॉडल भविष्यवाणी नियंत्रण (एमपीसी) का उपयोग करके हल किया है। मैंने MATLAB में समस्या बताई है और इसे हल करने के लिए FORCES http://forces.ethz.ch/ का उपयोग किया है। फोर्स ईटीएच ज़्यूरिख से एक वेब सेवा है जो पुस्तकालय मुक्त एएनएसआई-सी कोड उत्पन्न करती है। कोड का परीक्षण करने के लिए वे सी-कोड को MATLAB .mex फ़ाइल में संकलित करने के लिए एक स्क्रिप्ट प्रदान करते हैं। यह सब महान काम करता है।

अब मैं अपने सी # विंडोज फॉर्म प्रोग्राम में इस फ़ंक्शन का उपयोग करना चाहता हूं। सी # में सी-कोड का उपयोग करने के लिए मुझे सी-कोड को एक डीएल में संकलित करना है और फिर पी/Invoke का उपयोग करना है? क्या कोई और तरीका है? मैं इसे कैसे संकलित कर सकता हूं? क्या मैं सिर्फ कोड का उपयोग कर सकता हूं या नहीं, मुझे इसे संपादित करना है (__declspec या ऐसा कुछ जोड़ना)? क्या सीधे MATLAB से डीएल को संकलित करना संभव है?

.c और .h फ़ाइलें मेरे मुखपृष्ठ पर पाई जा सकती हैं: http://n.ethz.ch/~ rehofman/डाउनलोड/

मैं 64 बिट विंडोज 7, MATLAB 2013b, विजुअल स्टूडियो 2012 चलाता हूं।

अगर इसकी आवश्यकता है तो मेरे पास मिनीजीडब्ल्यू पहले से स्थापित है।

संपादित करें:

ठीक है यहाँ एक और विशिष्ट सवाल है: मेरे पास सी-कोड में लिखा गया एक फ़ंक्शन (myMPC_solve) है जिसे मैं C# से कॉल करना चाहता हूं। ऐसा करने का सबसे अच्छा तरीका क्या है? तर्क और डेटाटाइप सभी .h फ़ाइल में हैं।

0
आपने इस पोस्ट में कई प्रश्न पूछे हैं, उनमें से कुछ का जवाब देने के कई तरीके हैं, लेकिन इनके बारे में: मैं इसे कैसे संकलित कर सकता हूं? , यहां एक लिंक दिखाता है कि आप कैसे संकलित कर सकते हैं। पी/आमंत्रण के बारे में कई अन्य लिंक (यहां एक है) एक मानक .dll का उपयोग करने का तरीका दिखा रहा है, (या जैसा कि माइक्रोसॉफ्ट इसे कॉल करता है अप्रबंधित क
जोड़ा लेखक ryyker, स्रोत
वैसे, आपका प्रश्न दिलचस्प है, और यह दिखाता है कि आपने कुछ काम किया है, लेकिन किसी के लिए वास्तव में आपके प्रश्नों का उत्तर देने में मदद करना बहुत आसान नहीं होगा क्योंकि यह बहुत व्यापक है, और स्वयं निहित नहीं है। इन टिप्पणियों के संबंध में इस लिंक पर एक नज़र डालें: SSCCE
जोड़ा लेखक ryyker, स्रोत
@ L33TS पिनवोक एकमात्र तरीका नहीं है
जोड़ा लेखक David Heffernan, स्रोत
PInvoke एकमात्र तरीका है।
जोड़ा लेखक Bauss, स्रोत

1 उत्तर

  1. सी कोड को डीएलएल में संकलित करें, और इसे पी/इनवॉक का उपयोग करके शामिल करें।
  2. सी कोड को सी ++/सीएलआई मिश्रित मोड असेंबली में संकलित करें, एक रेफरी क्लास में कार्यक्षमता को लपेटें, और सी #
  3. एक COM सर्वर के साथ सी कोड लपेटें और सी #।
  4. से उपभोग करें
  5. कोड को MATLAB में छोड़ दें और सी # से उपभोग करें। ऐसे कई तरीके हैं जिनमें सी # कोड द्वारा MATLAB कोड का उपभोग किया जा सकता है।

और मुझे यकीन है कि उपरोक्त से परे अन्य विकल्प हैं।

अब, यदि आप अगले कदम के बारे में विस्तृत कदम-दर-चरण निर्देश की उम्मीद कर रहे हैं, तो मुझे आपको निराश करने के लिए खेद है। आपने एक व्यापक प्रश्न पूछा और मैंने आपको एक संगत व्यापक जवाब दिया है। आपको आगे क्या करना चाहिए, ऊपर दिए गए विकल्पों में से एक को चुनना और इसे कार्यान्वित करना है। जब आप अटक जाते हैं, तो अधिक विशिष्ट प्रश्न पूछने के लिए स्वतंत्र महसूस करें।

0
जोड़ा
मैंने इसे SWIG का उपयोग करके हल किया।
जोड़ा लेखक user3005031, स्रोत