MATLAB

2012-12-11 14 views
5

से एक डीएलएल बनाएं मैंने MATLAB में एक DLL बनाया है जो मुझे मेरे .m कार्यों में एक इंटरफ़ेस प्रदान करता है।MATLAB

अब मैं इसे एमसीआर रनटाइम लाइब्रेरी के साथ उपयोग करना चाहता हूं। (एमसीआर = मैटलैब कंपाइलर रनटाइम)।

मैं इस डीएलएल को सी सी रूटीन के भीतर से कॉल कर रहा हूं जो अंततः जीसीसी (मिनजीडब्लू) के साथ एक रैपर डीएलएल में संकलित हो जाता है।

अब मेरी समारोह दो रूपों में डाल दिया जाता है:

extern LIB_XYZ_C_API 
bool MW_CALL_CONV mlxGet_path(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]); 
extern LIB_XYZ_C_API bool MW_CALL_CONV mlfGet_path(int nargout, mxArray** p); 

इन से पर एक तरह से "पुरानी शैली/विरासत" प्रतीत हो रहा है कि मैं बाद के एक पूर्व के रूप में चुनें।

char get_path(LStrHandle path) 
{ 
    char mret = init_XYZ(); // here I call mclmcrInitialize(), mclInitializeApplication(NULL, 0) etc. 
    if (mret) return mret; 
    mret = 2; 
    // here the relevant part begins 
    mxArray * mxpath = NULL; // set it to NULL and let the callee allocate it 
    bool bret = mlfGet_path(1, &mxpath); 
    // now I convert the mxpath to a string 
    // What do I do with the mxpath afterwards? 
    // I try to free it with 
    mxDestroyArray(mxpath); 
    return mret; 
} 

और यहाँ मुसीबत शुरू होता है: mxDestroyArray() लिंक करने की प्रक्रिया में नहीं पाया जा सकता है:

undefined reference to `mxDestroyArray' 

मैं मैन्युअल रूप से निर्माण प्रक्रिया को -llibmx जोड़ देते हैं तो

मैं इसे इस तरह से फोन , बिल्ड चलता है, लेकिन फिर libmx.dll नहीं मिल सकता है, क्योंकि एमसीआर केवल $MCR\runtime\win32 पथ में रखता है, लेकिन $MCR\bin\win32 नहीं जहां libmx.dll जीवन।

मैं क्या कर सकता है?

क्या मुझे स्वयं संकलित DLL का उपयोग करते समय एक अलग "नष्ट" फ़ंक्शन चुनना है?

या क्या मुझे पथ के साथ मूर्ख बनाना है? इसके अलावा (मैं बहुत आशा नहीं है ...)

, अन्य कार्यों जो याद कर रहे हैं देखते हैं, लेकिन मुझे लगता है कि यह एक ही तरीके से हल किया जा जाएगा:

mxGetNumberOfElements 
mxIsDouble 
mxGetPr 
mxGetM 
mxGetN 
mxGetData 
mxIsChar 
mxIsCell 
mxDestroyArray 
mxGetCell_730 
mxSetCell_730 
mxGetString_730 
mxCalcSingleSubscript_730 
mxGetNumberOfDimensions_730 
mxCreateDoubleMatrix_730 
mxCreateNumericMatrix_730 
mxCreateCellMatrix_730 
+0

यह सुनिश्चित नहीं है कि यह समाधान है या नहीं, लेकिन मैटलैब के हाल के संस्करण आपको प्रोजेक्ट (संकलन से पहले) में फ़ाइलों को जोड़ने की अनुमति देते हैं जो स्वचालित रूप से लिंक नहीं होते हैं। –

उत्तर

0

मुझे पता चला है कि यह है कि बनाता है एमसीआर का उपयोग किया जाता है या एक स्थापित MATLAB स्थापना में एक बड़ा अंतर है।

  1. उपयोग -lmx के बजाय -lmclmcrrt और संयोजक के लिए सही पुस्तकालय पथ का उपयोग करें।
  2. संकलन में उपयोग की जाने वाली प्रत्येक फ़ाइल में सही #include फ़ाइलों का उपयोग करें। विशेष रूप से, #include "matrix.h" और MATLAB DLL के साथ बनाई गई हेडर फ़ाइल को इंटर-मिक्स न करें।