VS2019调用Matlab2019b生成的dll时初始化异常

本文介绍了在Visual Studio 2019中使用C++调用MATLAB 2019b动态链接库时遇到的初始化异常和0xc0000005错误的解决方法。通过调整VS与MATLAB版本匹配,配置混编环境,以及修改调试设置和解决Debug错误,成功解决了问题。
摘要由CSDN通过智能技术生成

在Visual Studio中使用C++调用Matlab程序

我目前在写一个用VS和Matlab混编的程序,由于之前的版本(VS2005+MATLAB2010b)太老了,现在想换用VS2019+MATLAB2019b的版本。我原本以为会很简单就能完成配置,没想到在运行时会出现下面的问题。(帧不在模块中。在加载的模块中未找到当前堆栈帧。无法显示此位置的源代码。)

运行报错

VS与MATLAB版本选择

如上所述,本次我用的软件是VS2019和MATLAB2019b,如果你用的是其他版本的软件可以在MATLAB官网查找,此版本的MATLAB支持哪个版本的编译器。

Previous Releases: System Requirements and Supported Compilers

Supported Compilers
在Supported Compilers一栏中,点击Details,即可查看支持的编译器,已根据MATLAB版本选择相应版本的VS,或者根据当前的VS版本选择要配合编程的MATLAB版本。

VS与MATLAB混编的环境配置

各个版本的环境配置大同小异,能搜到的详细步骤比较多,下面列出对我比较有帮助的博文。

在Visual Studio中使用C++中调用MATLAB程序

C++调用Matlab生成的DLL动态链接库进行混合编程(win10+VS2015+Matlab2016b)

VS与matlab混合编程

初始化异常的解决

检查代码后,发现在调用初始化时[名字]Initialize(),程序就会引发此异常。

0xc0000005处理

一开始我在网上搜解决方案时,一直纠结在“帧不在模块中。在加载的模块中未找到当前堆栈帧。无法显示此位置的源代码。”这句话之中,后来试着搜了异常信息0xc0000005:读取位置0x0000000000000008,发现了一个博文就能够解决这个问题。

matlab导出dll及c++调用matlab初始化异常处理

这里的解决办法是:

1.调试–>窗口–>异常设置

异常设置
2.取消勾选Win32 Exceptions

取消勾选
但是,我做了这一步后,程序能够跑出来了,只是输出窗口会有很多异常信息xsd_binder::MalformedDocumentError,下面可以解决这个问题。

Debug错误:xsd_binder::MalformedDocumentError

主要参考:

Matlab与C++混合编程

解决办法:

属性-调试(debugging)-调试器类型(debugger type):自动(auto)修改成混合(mixed)

调试器类型改为混合
之后,我发现将调试器类型改为混合,即使在异常设置中不取消勾选Win32 Exceptions,程序也能正常运行,且没有异常信息。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值