天天看點

VS2010與matlab R2011b混合程式設計遇到問題及解決

1.要生成C++動态連結庫,在matlab指令視窗中輸入:

>> mcc -W cpplib:ColorHarris -T link:lib ColorHarris -d F:\zhangying\xieyulin\cfile\

結果出現:Depfun error: \'Unable to locate ColorHarris as a function on the MATLAB path\'

原因:目前編譯路徑沒有修改,錯誤已經提示了,将目前matlab路徑改到你這個m檔案所在的路徑下,(點選運作按鈕會出現 change directory,選擇即可)再進行編譯!

2.在VS2010中執行到:

if( !ColorHarrisInitialize())

    {

         std::cout << "Could not initialize ColorHarris!" << std::endl;

    }

時出現:cannot open CTF archive file

\'c:\document~1\jiao\local~1\Temp\mathworks_tem_2696_2808\'

or

\'c:\document~1\jiao\local~1\Temp\mathworks_tem_2696_2808.zip\'

這個問題查了很長時間也沒查出來解決方法,後來建立了工程,重新添加檔案,結果突然沒這個問題了。。就這麼不了了之。。。

參考部落格: http://blog.sina.com.cn/s/blog_4fc6546101011cu5.html

3.将matlab的m檔案用mcc生成.h .lib .dll 檔案後拷貝到VS2010項目根目錄中,結果運作時提示編譯的應用程式或DLL為無效的windows映像。

分析:查了很長時間,覺得應該是拷貝的過程中損壞了dll檔案

解決:在編譯時就将生成檔案的所在目錄指定為VS2010項目根目錄,保留.h .lib .dll 檔案,再将其他檔案項删除即可。為了保險,用mcc -c 生成ctf檔案也放在根目錄下,運作通過。

4.在VS2010調用matlab檔案時,提示 Undefinedfunction “myfun1”  for input arguments of type \'double\'.

分析:myfun1與調用的matlab主函數不在同一個檔案夾裡,在matlab中運作時不會出現找不到函數的問題(還是覺得matlab很智能啊)。但VS2010找不到放在另一個檔案夾裡的函數,是路徑的問題。

解決:将myfun1.m拷貝到調用的matlab主函數同一個路徑下(放在同一個檔案夾裡),運作通過。

VS2010與matlab R2011b混合程式設計遇到問題及解決