• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

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

武飞扬头像
lvh98
帮助1

在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一栏中,点击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,程序也能正常运行,且没有异常信息。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhihahch
系列文章
更多 icon
同类精品
更多 icon
继续加载