2011-06-21 73 views
14

Tôi muốn gọi hàm MATLAB trong dự án C++ của mình.Cách gọi hàm Matlab từ C++

Tôi đang sử dụng Matlab R2010a và Visual Studio 2010

Trước tiên tôi tạo ra một hàm MATLAB đơn giản:

function y = foo(x) 
    y = x+1; 

và sau đó tôi sử dụng trình biên dịch MATLAB để biên dịch chức năng này sử dụng trình biên dịch MATLAB GUI (File- > new -> Deployment Project và sau đó chọn C++ shared Library). Nó tạo ra tập tin này 2 thư mục: distrib và src.

distrib chứa:

  1. foo.dll
  2. foo.h
  3. foo.lib

src chứa:

  1. Foo.cpp
  2. foo .dll
  3. foo.exp
  4. foo.exports
  5. foo.h
  6. foo.lib
  7. foo_mcc_component_data.c

Tôi muốn sử dụng tập tin này trong một ứng dụng C++. Tôi đã thử nhiều lần và tôi không tìm được cách nào. Tất cả các cách tôi tìm thấy trên internet đang sử dụng trình biên dịch MATLAB cũ để tạo ra các tệp khác nhau hoặc hoạt động trên một phiên bản cũ của studio trực quan.

Vì vậy, xin vui lòng bất cứ ai có thể giúp tôi?

Tôi phải làm gì? Tôi phải thêm những tệp/tài liệu tham khảo nào và ở đâu? Tôi phải xác định đường dẫn nào?

Trả lời

3

Các tệp foo.hfoo.lib sẽ được yêu cầu để biên dịch ứng dụng của bạn. Các tập tin foo.dll sẽ cần phải được vận chuyển với ứng dụng kết quả của bạn, thường là trong cùng một thư mục.

Nếu bạn đặt tệp foo.h trong cùng thư mục với tệp nguồn của mình, bạn sẽ không cần phải làm bất kỳ điều gì đặc biệt cho #include "foo.h". Bạn cũng có thể thêm đường dẫn trực tiếp vào foo.lib trong các phụ thuộc của trình liên kết bên ngoài.

Nếu bạn muốn lưu trữ các tệp này ngoài thư mục dự án và/hoặc sử dụng lại các tệp này trong các ứng dụng khác, bạn có thể đọc trên VC++ Directories, Projects and Solutions.

Chỉnh sửa: Bạn cũng có thể cần thêm thư viện MATLAB vào đường dẫn bao gồm và thư viện của mình. Kiểm tra giải pháp hỗ trợ MathWorks Why do I receive the error 'Could not find include file "mclmcrrt.h"' when trying to compile a stand-alone application?

+0

tôi thêm chỉ foo.h trong các tập tin tiêu đề và tôi đã tạo ra một chính Tệp .cpp và tôi bao gồm foo.h và tôi mở thuộc tính dự án và tôi đi đến trình liên kết và tôi đã thêm vào các phụ thuộc bổ sung foo.lib và khi xây dựng dự án, nó cho tôi lỗi rằng nó không thể mở hai tệp nguồn này #include "mclmcrrt.h" #include "mclcppclass.h" vị trí của nó trong foo.h Bạn có thể giúp tôi không? –

11

có thể đã quá muộn nhưng trong tương lai.

Bao gồm foo.h.

Thêm C/C++ - Bao gồm chung thư mục cách đến tiêu đề MATLAB (C:\Program Files (x86)\MATLAB\R2009b\extern\include).

Thêm foo.lib, mclmcrrt.libmclcommain.lib cho Trình liên kết trong phụ thuộc bổ sung.

Đối mối liên kết trong Thư mục Thư viện bổ sung hiển thị cách để libs matlab của bạn (C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft cho 32bit ver (matlab và VS phiên bản nên được như vậy. Tôi đã phải cài đặt phiên bản Matlab 32bit thứ hai.)).

Tôi đã thêm đường vào số foo.lib trong đường dẫn hệ thống của mình.

Trước khi sử dụng thư viện foo.dll, bạn nên khởi tạo MCR và chức năng thư viện.

mclInitializeApplication(NULL,0); 
fooInitialize(); 

Sau khi sử dụng đừng quên:

mclTerminateApplication(); 
fooTerminate(); 

Và một số mã trình diễn, trông giống như:

int num = 1; 
double numbrIn = 1.5; 
std::cout<<"now we have " << numbrIn << std::endl; 
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL); 
array_in.SetData(&numbrIn,num); 
mwArray array_out; 
foo(1, array_out, array_in); 
array_out.GetData(&numbrIn, num); 
std::cout<<"now we have " << numbrIn << std::endl; 
+1

Tương lai cảm ơn bạn! – Spencer