我正在使用Matlab 2013a和Visual Studio 2013.我正在尝试使用来自C ++控制台应用程序的MatLab编译的dll。我的简单Matlab测试dll和控制台应用程序是为64位机器编译的(我确保它们是通过dumpbin的64位)。我的机器上也安装了正确版本的MCR(即使没有必要)。
我使用“mbuild -setup”命令设置我的编译器。
我使用以下命令行编译我的.m文件:“mcc -v -W cpplib:mylib -T link:lib myFunc”已成功。
在我的控制台应用程序中,我包含以下库:mylib.lib,mclmcrrt.lib,mclmcr.lib,libmx.lib,libmat.lib并使用此路径中的库“C:\ Program Files \ MATLAB \ R2013a \的extern \ lib中\ Win64的\微软“
当我调试我的程序时,它使用这个调用成功初始化MCR:“mclInitializeApplication(NULL,0)”但是当我调用“mylibInitialize()”以初始化我的库时,程序崩溃了。它甚至没有抛出一个axception因此我无法使用try / catch块来处理它。它给出了未处理的异常和访问vialoation错误消息。
这些是我得到的示例调试输出消息;
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E48的xercesc_2_7 :: NoSuchElementException。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E40处的xsd_binder :: MalformedDocumentError。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E263EF4E48的xercesc_2_7 :: NoSuchElementException。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E2643FF630处的boost :: thread_interrupted。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E2642FFCD0处的boost :: thread_interrupted。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EFB0F0处的CryptoPP :: AES_PHM_Decryption :: InvalidCiphertextOrKey。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EF4C10的tfFailedException。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C ++异常:内存位置0x000000E264EF9410的varflowFailedException。线程0x3550已退出,代码为0(0x0)。 'MatlabTest.exe'(Win32):加载'C:\ Program Files \ MATLAB \ R2013a \ bin \ win64 \ hgbuiltins.dll'。无法找到或打开PDB文件。
MatlabTest.exe中0x0000000000B46E60(m_interpreter.dll)的第一次机会异常:0xC0000005:访问冲突读取位置0x0000000064EF3B90。 MatlabTest.exe中0x0000000000B46E60(m_interpreter.dll)的未处理异常:0xC0000005:访问冲突读取位置0x0000000064EF3B90。
程序'[12952] MatlabTest.exe'已退出,代码为0(0x0)。
我将MCR安装到另一台计算机并尝试运行此控制台应用程序。我得到了同样的结果。
我也尝试过Loren的Vigenere例子, http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#respond
它也不起作用。
你知道为什么会这样吗?
由于
答案 0 :(得分:0)
似乎问题是MATLAB和Visual Studio版本不匹配。如果我将MatLab 2016a与Visual Studio 2013一起使用,则没有问题,一切都运行良好。
答案 1 :(得分:0)
我遇到了与Matlab2017 + VS 2015类似的问题。 可能与MATLAB使用的java存在冲突。
我已经使用
修复了它const char *args[] = {"-nojvm"};
const int count = sizeof(args) / sizeof(args[0]);
mclInitializeApplication(args, count))
而不是
mclInitializeApplication(NULL,0)