matlab添加kernel32.lib

matlab添加kernel32.lib,第1张

在使用MATLAB进行编程时,若需要调用Windows *** 作系统下的C++ API函数,则需要添加kernel32.lib库文件。这个库文件包含了Windows *** 作系统下许多常用的API函数,如文件 *** 作、进程管理、内存管理等。添加库文件的方法可以通过打开 MATLAB 工具栏中的“MEX选项”窗口,在“Linker”选项卡中添加要使用的库文件。这样即可在 MATLAB 中轻松使用Windows API函数,方便直接地与 *** 作系统进行交互。

方法/步骤

菜单:工程→ 属性... 选择配置属性下的 VC++ 目录。在包含目录栏目中添加matlab相关的include文件。我的matlab装在F盘中,只要把F:\MatLab\extern\include\win64和F:\MatLab\extern\include两个目录配置上去就好,这里注意下要是win64的vs所建立的工程必须是x64的,否则会出错,比较低的版本则没有win64,只有win32 这样是建立一个x86或win32工程即可

在 库目录栏目中添加matlab相关的lib文件。例如:F:\MatLab\extern\lib\win32\microsoft;F:\MatLab\extern\lib\win32;F:\MatLab\extern\lib\win64\microsoft;F:\MatLab\extern\lib\win64;

注意这里是针对于不同的工程和机器位数,最好全部加上去,以免出错。

菜单:工程 属性 选择配置属性下的 连接器→ 输入。

在 附加依赖项 栏目中输入项目需要引用matlab的的lib文件库。

libmat.lib libeng.lib libmx.lib

菜单:工程 属性 选择配置属性下的 连接器→ 常规。

在 附加库目录 栏目中,添加库所在的目录名称。如:F:\MatLab\bin\win64

这一步相当的重要,不然的话,各种dll文件找不到,lib文件找不到之类的报错。

测试:从网上随便找一个代码

#include <iostream>#include <iomanip>using namespace std#include <engine.h>#include <string.h>

void main(){ // 定义循环变量 int i = 0, j = 0

// 状态变量

int nStatus = 0 // 定义MATLAB引擎指针 Engine *ep

// 定义mxArray变量指针 mxArray *A, *B

// 定义矩阵数组

// 注意:VC中矩阵的行列次序与MATLAB正好时相反,需要转置。 double arData[3][3] = {{7.5,16.3,9.6},{13.2,8.9,12.3},{9.6,5.4,13.7}}double arResData[3][3]

// 输出原矩阵 cout<<"原矩阵为:"<<endlfor(i = 0i <3i++) { for(j = 0j <3j++) { cout<<setw(10)<<arData[i][j]<<" " } cout<<endl} // 打开MATLAB引擎 ep = engOpen(NULL)if(ep == NULL) { cout<<"无法打开MATLAB引擎。"<<endl exit(EXIT_FAILURE)}

// 是否显示MATLAB窗口:true-显示;false-隐藏。

nStatus = engSetVisible(ep, false)

if(nStatus != 0)

{

cout<<"设置MATLAB显示属性失败。"<<endl

exit(EXIT_FAILURE)

}

// 为mxArray变量分配空间 A = mxCreateDoubleMatrix(3,3,mxREAL)B = mxCreateDoubleMatrix(3,3,mxREAL)if(A == NULL || B == NULL) { cout<<"为mxArray变量分配空间失败。"<<endl

exit(EXIT_FAILURE)}

// 将数组中的数据写入到mxArray空间中

memcpy((void*)mxGetPr(A),(void*)arData,sizeof(arData))

// 将矩阵变量A写入到MATLAB引擎空间

nStatus = engPutVariable(ep,"A",A)

if(nStatus != 0)

{

cout<<"矩阵变量写入MATLAB引擎空间失败。"<<endl

exit(EXIT_FAILURE)

}

// 执行引擎命令求矩阵A的逆矩阵

nStatus = engEvalString(ep,"B=inv(A)")

if(nStatus != 0)

{

cout<<"执行MATLAB引擎命令失败。"<<endl

exit(EXIT_FAILURE)

}

// 从MATLAB引擎空间中读取执行结果

B = engGetVariable(ep,"B")

// 将矩阵变量B复制到数组arResData中

memcpy((void*)arResData,(void*)mxGetPr(B),sizeof(arResData))

// 释放矩阵变量空间

mxDestroyArray(A)

mxDestroyArray(B)

// 关闭MATLAB引擎

engClose(ep)

// 输出计算结果

cout<<"逆矩阵为:"<<endl

for(i = 0i <3i++)

{

for(j = 0j <3j++)

{

cout<<setw(10)<<arResData[i][j]<<" "

}

cout<<endl

}

// 暂停程序,查看结果

system("pause")

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11568769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存