MATLAB R2014a与VS2013混合编程(vs调用dll文件)

来源:互联网 发布:中兴通讯数据分析 编辑:程序博客网 时间:2024/06/05 08:01

      查了很多资料,但是总是会出错,尝试了一整天后,终于成功了,详细步骤如下。

第一步:Matlab输入与配置

1. 在matlab编写一个测试函数:

function [sum,prod]=sum_prod(p1,p2)
    sum=p1+p2;
    prod=p1.*p2;


2. 在命令框输入  mex -setup

选择vs2013环境

选择语言为C++


3. 在命令框输入mbuild -setup


点C++


4.在命令框输入

mcc -W cpplib:sum_prod -T link:lib sum_prod.m 

然后等待:


5. 输出的sum_prod.dll,sum_prod.lib,sum_prod.h为所需文件,至此matlab配置完毕


步骤4也可以通过deploytool命令实现,不赘述


第二步:VS输入与配置

1.接着打开VS2013创建一个空项目,在菜单栏的项目中选择属性,然后有如下界面:



2. 增加VC++/包含目录项:

D:\Program Files\MATLAB\R2015b\extern\include


3.  增加VC++/ 库目录项:                                   

D:\Program Files\MATLAB\R2015b\extern\lib\win64\microsoft


4. 点击链接器/输入


在附加依赖项添加3个lib:

sum_prod.lib

mclmcrrt.lib

mclmcr.lib


5.回到属性页在右上角的配置管理器中新建x64平台



6.把matlab生成的sum_prod.dll 拷贝到工程根目录x64下debug文件夹中,sum_prod.lib,sum_prod.h拷贝到根目录中与工程同名的文件夹下,否则会提示找不到以上三个文件。


7.新建 main.cpp作为测试

[cpp] view plain copy
  1. #include <iostream>  
  2. #include "sum_prod.h"  
  3. using namespace std;  
  4. int main()  
  5. {  
  6.     if (!sum_prodInitialize())  //必须写  
  7.     {  
  8.         //cout << "初始化失败!" << endl;  
  9.         return -1;  
  10.     }  
  11.     double p[2][2] = { 1, 2, 3, 4 };  
  12.     mwArray X(2, 2, mxDOUBLE_CLASS);  
  13.     mwArray Y(2, 2, mxDOUBLE_CLASS);  
  14.     mwArray SUM(2, 2, mxDOUBLE_CLASS);  
  15.     mwArray PROD(2, 2, mxDOUBLE_CLASS);  
  16.     for (int i = 0; i < 2; i++)  
  17.     {  
  18.         for (int j = 0; j < 2; j++)  
  19.         {  
  20.             X(i + 1, j + 1) = p[i][j];  
  21.             Y(i + 1, j + 1) = p[i][j];  
  22.         }  
  23.     }  
  24.     sum_prod(2, SUM, PROD, X, Y);  
  25.   
  26.     double  sum[2][2], prod[2][2];  
  27.     for (int i = 0; i < 2; i++)  
  28.     {  
  29.         for (int j = 0; j < 2; j++)  
  30.         {  
  31.             sum[i][j]=SUM(i + 1, j + 1) ;  
  32.             prod[i][j]=PROD(i + 1, j + 1) ;  
  33.         }  
  34.     }  
  35.     for (int i = 0; i < 2; i++)  
  36.     {  
  37.         for (int j = 0; j < 2; j++)  
  38.         {  
  39.             cout << sum[i][j];  
  40.         }  
  41.         cout << endl;  
  42.     }  
  43.     cout << endl;  
  44.     for (int i = 0; i < 2; i++)  
  45.     {  
  46.         for (int j = 0; j < 2; j++)  
  47.         {  
  48.             cout << prod[i][j];  
  49.         }  
  50.         cout << endl;  
  51.     }  
  52.     cout << endl;  
  53.     system("pause");  
  54.     return 0;  
  55. }  

8. 测试

点击本地windows调试器

运行结果如下:

 

阅读全文
0 0
原创粉丝点击