VC与Matlab混合编程之调用动态链接库dll<二>

1、是先建立 matlab 的 m 文件。
这里为了简单起见,我在matlab中定义了一个函数,其m文件如下:
function y = myadd(a,b)
y=a+b
保存为myfunct.m
2.MCC命令编译生成得到h、dll、lib等文件
在matlab命令行中输入:
mcc -B csharedlib:myadd myadd.m (此方式为c风格函数)
(具体命令含义可参考《精通matlab与C/C++混合程序设计》刘维,第3版,北京航空航天大学出版社。)
(myadd是生成的lib文件名,可以随意命名。myadd.m是想调用的.m文件名。
至此,可以发现在myadd.m所在的目录生成了一系列文件。我们将要使用:myadd.h, myadd.dll, myadd.lib,myadd.ctf。(matlab2010b未生成ctf文件,之前的老版本matlab会生成)

2.3:新建一个 VC 工程:test

为了简单,我们在这里建立一个win32控制台程序。如下:
然后,将上面这3个文件(myadd.h, myadd.dll, myadd.lib)拷贝到VC工程所在的目录中,以便VC调用之,并将.h文件加入到工程中。

2.3 VC 编程:(代码如下 )

// myAdd.cpp : 定义控制台应用程序的入口点
//
#include "stdafx.h"
// include matlab sys head file
#include "mclmcrrt.h"
#include "mclmcr.h"
#include "mclcppclass.h"
#include "matrix.h"



// include lib head file
#include "myadd.h"

// link matlab sys lib
#pragma comment(lib, "mclmcrrt.lib")
#pragma comment(lib, "libmx.lib")
#pragma comment(lib, "libmat.lib")
#pragma comment(lib, "mclmcr.lib")//也可以在调试-link-input选项中添加

// link lib
#pragma comment(lib, "myadd.lib")//也可以在调试-link-input选项中添加
using namespace std;
int main(int argc, _TCHAR* argv[])
{
    if (!mclInitializeApplication(NULL, 0))
    {
        cout << "Could not initialize the application."<< endl;;
    }
    if (!myaddInitialize())
    {
        cout << "Can't Initalize!" << endl;
    }
    cout << "开始运行D" << endl;
    mxArray *in1, *in2;
    mxArray *out1 = NULL;
    double y1;
    double x1 = 32, x2 = 24;
    in1 = mxCreateDoubleMatrix(1, 1, mxREAL);
    in2 = mxCreateDoubleMatrix(1, 1, mxREAL);
    memcpy(mxGetPr(in1), &x1, sizeof(double));
    memcpy(mxGetPr(in2), &x2, sizeof(double));
    mlfMyadd(1, &out1, in1, in2);
    double *p = mxGetPr(out1);// 将? matlab 中D的Ì?矩?阵¨®的Ì?指?针?传ä?递ÌY给? C 语®?言?中D的Ì?指?向¨° double 的Ì?指?针?
    y1 = p[0];
    cout << y1 << endl;
    myaddTerminate();
    mclTerminateApplication();
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值