c++ 调用matlab

博主分享了在使用MATLAB进行程序开发时遇到的两大类问题及解决方法。第一类问题是初始化问题,强调了在调用外部库时需要开启控制台模式以便查看错误,并详细列举了编译步骤。第二类问题是函数异常问题,通过`mcc -mfilename`生成独立可执行文件来定位错误。此外,还提醒注意DLL文件的位置,避免覆盖导致的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

足足磨了3天,总算是摸清楚了,把网上所有方法试了个遍,很多都是模棱两可

总结1:在调用别人的库一定要开控制台模式,很多错误是通过std::cout报出来的,在winform中根本不会提示

总结2:第一类错误:初始化的问题,可以通过网上步骤

    mex -setup

    mbuild -setup

    mcc -W cpplib:ZSLAdd -T link:lib ZSLAdd.m -C

  忽略win32 异常

 最后还是把所有dll搬到了debug目录,尽管设置了环境变量,但是没效果,可能编译的时候是按应用程序当前目录加载的,matlab中有mysql.dll如果自己应用中有用到数据库,别覆盖,否则又是抓狂的体验,

   第二类错误:函数异常问题,这个问题是相当坑,很难调试是哪里出了问题(错误1:dll找不到,错误2:函数写的有问题),这两类问题都可以通过  mcc –m filename 生成独立可执行程序来报错误,感谢这篇帖子详细的解释了编译指令用法

https://blog.youkuaiyun.com/leixiaohua1020/article/details/38318517

### C++ 调用 MATLAB 函数 #### 使用 MATLAB Engine API 进行调用 为了从 C++调用 MATLAB 函数,可以利用 MATLAB 提供的 Engine API。此接口允许开发者启动 MATLAB 引擎会话并执行命令函数。 ```cpp #include "MatlabEngine.hpp" #include " matlab::engine::String " #include <iostream> #include <vector> void call_matlab_function() { try { // 启动MATLAB引擎 auto eng = matlab::engine::startMATLAB(); // 定义要调用MATLAB函数名及其输入输出参数数量 const matlab::engine::String funcName(u"myFunction"); const size_t numOutputs = 1; std::vector<matlab::data::Array> results; // 执行MATLAB函数 eng->feval(funcName, results, numOutputs); // 处理返回的结果... } catch (const matlab::engine::MATLABEngineException& e) { std::cerr << "Error calling MATLAB function: " << e.what() << '\n'; } } ``` 上述代码展示了如何通过 `feval` 方法来调用名为 `myFunction` 的 MATLAB 函数,并处理可能发生的异常情况[^1]。 #### 编译与链接设置 当准备编译项目时,需确保包含了必要的头文件路径和库文件。对于静态链接方式而言,通常需要引入如下几个库: - mclmcrrt.lib - libmat.lib - libmx.lib - mclmcr.lib - addtest.lib (如果适用) 这些库负责提供访问 MATLAB 数据结构所需的功能和支持[^3]。 另外,在较新的 MATLAB 版本(如R2023a)下开发时,建议使用对应的 Visual Studio 年份版本来进行兼容性的最佳实践配置,例如 VS2019 更新版本[^4]。 #### 注意事项 由于 MxArray 类型的数据索引是从 1 开始而非零基底数组,因此在遍历此类数据对象时应注意这一点。例如,在循环读取多维数组元素时应调整起始位置以匹配这一特性[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值