MATLAB如何使用动态链接库的形式调用C++


问题描述:使用MATLAB来调用C++写的dll文件,并且调用了外部库的形式,调用dll和返回结果都采用指针的形式
例如:在MATLAB中输入一个路径,然后调用DLL工程,使用OPENCV来读取路径下的图片,并返回长宽的数组

MATLAB如何使用动态链接库的形式调用C++,并实现指针的传入与传出

1、首先选择Win32控制台程序,然后如下图所示,选择生成DLL工程文件。
在这里插入图片描述
注意:如果使用较新版本的MATLAB调用此DLL,需要将该工程设置为64位版本的,不然调用会失败。
在这里插入图片描述

2、新建头文件,头文件名称需要与工程名称一致
在这里插入图片描述
头文件内容如下所示,表示定义了一个C++类型的主函数接口,以便MATLAB查找

readpicture.h

#ifndef READPICTURE_H
#define READPICTURE_H


#ifdef __cplusplus
extern "C"
{
#endif
	__declspec(dllexport) double* read(char* in_path1);
#ifdef __cplusplus
}

#endif
#endif

3、新建一个cpp文件,名称与工程名称一致
在这里插入图片描述
添加如下代码,因为使用了opencv中读取照片的函数,所以需要先将此工程配置opencv的外部库环境(opencv也需64位),通过输入的路径,读取图片,然后将图片的宽高存放在数组中,将数组返回

readpicture.cpp

#include<string>
#include<opencv.hpp>
#include<opencv2\features2d\features2d.hpp>
#include<nonfree\nonfree.hpp>
#include"readpicture.h"
using namespace cv;
using namespace std;

double* read(char* in_path1)
{
	string in_path = in_path1;
	Mat img = imread(in_path);
	double t[2];
	t[0] = img.rows;
	t[1] = img.cols;
	return t;
}

4、将工程文件进行build,打开工程存放路径,将Debug下的.dll等文件以及代码的.h和.cpp文件都烤出到一个新的文件夹中。(如果定义了多个.h文件和多个.cpp文件,则都需要拷出)
插入图片

5、打开MATLAB文件,来调用编写好的DLL文件,需将路径更改至.dll所在的路径中。首先将matlab中的string转换成c++可读取的char字符串类型,可通过MATLAB中的libpointer进行转换。然后通过loadlibrary将dll文件加载进MATLAB,通过calllib来调用主程序,实现参数的传递,并将返回的指针存放在p这个变量中。因为只传递了指针的地址,所以只有在定义了这个指针的类型和大小后,才能获取指针所指向的内容。通过setdatatype定义指针的类型为double型,并且该指针指向的是一个2*1的矩阵,通过p.Value查看其具体的内容。

clc;clear;
i_path='D:\\temp\\2.jpg;
ii_path=libpointer('cstring',i_path);
%调用函数
loadlibrary('readpicture.dll','readpicture.h');
[p,xval]=calllib('readpicture', 'read', ii_path);
unloadlibrary cpts_generation;
%将返回的指针取出
setdatatype(p,'doublePtr',2,1);
res_cpts=p.Value';
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值