#最开始尝试了MFC+matlab DLL的方法 C++还没玩通 最后还是放弃MFC了 看的经验没有给出MFC的完整程序
运行环境
MCRuntime 9.8 (MATLABR2020A)
VS2017
注:这里不是调用matlab引擎的方法 在客户机不需要安装MATLAB 只要安装配置MCR即可
MATLAB 代码(以myfit为例,程序来自亲测可行的文章)
function c = myfit(x, y, n)
c=polyfit(x,y,n);
end
MATLAB生成DLL
装了VS2017 自己会识别出编译器
命令格式:mcc -B cpplib:myfit myfit.m
需要的文件 myfit.lib myfit.h myfit.dll
VS 环境设置(重要)
#这里我复制(那篇亲测可行文章的)
将前面生成的myfit.dll、myfit.h和myfit.lib三个文件拷贝到新建的C++工程目录中,并将myfit.h加入工程,并设置工程属性。
(如果使用MCR将这些改成MCR对应文件的目录即可,都是有的)
项目属性——VC++目录——包含目录:
项目属性——VC++目录——库目录:
项目属性——链接器——输入:
mclmcrrt.lib
myfit.lib(这是自己生成的)
C++代码(和matlab代码来自一个文章,这里需要读取TXT,但没有这个文件也能运行)
#include<iostream>
#include<fstream>
#include"myfit.h"
#define NUM 161
using namespace std;
int main()
{
if (!myfitInitialize())
return -1;
ifstream infile("data.txt");
double x[NUM], y[NUM];
for (int i = 0; i < NUM&&infile; i++)
{
infile >> x[i] >> y[i];
}
infile.close();
mwArray mwx(NUM, 1, mxDOUBLE_CLASS);
mwArray mwy(NUM, 1, mxDOUBLE_CLASS);
mwArray mwc;
mwArray mwn(1, 1, mxINT32_CLASS);
mwx.SetData(x, NUM);
mwy.SetData(y, NUM);
int n;
cout << "请输入多项式拟合的阶数:";
cin >> n;
mwn = n;
cin.get();
myfit(1, mwc, mwx, mwy,mwn);
double c[4];
mwc.GetData(c, 4);
cout << "多项式系数为:" << mwc << endl;
cin.get();
myfitTerminate();
return 0;
}
运行结果
这里红线是MATLAB报的错 引用成功
再提一次重点文章,帮助太大了
C++调用DLL 可用,记得设置64位
MFC 还是太难 这个文章基本可以实现通用了