我正在使用Matlab 2013a和Visual Studio2013。我正在尝试从C++控制台应用程序使用MatLab编译的dll。我简单的Matlab测试dll和控制台应用程序是为64位计算机编译的(通过转储,我确保它们是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 \ microsoft”
当我调试程序时,它使用以下调用成功初始化了MCR:“mclInitializeApplication(NULL,0)”,但是当我调用“mylibInitialize()”以初始化我的库时,程序崩溃。它甚至都不会引发接受,因此我无法使用try / catch块来处理它。它给出了未处理的异常和访问错误信息。
这些是我得到的示例调试输出消息。
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++异常:boost::thread_interrupt在内存位置0x000000E2643FF630处。
MatlabTest.exe中0x00007FFA22761F08的第一次机会异常:Microsoft C++异常:boost::thread_interrupt在内存位置0x000000E2642FFCD0。
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
它也不起作用。
您知道为什么会这样吗?
谢谢
最佳答案
看来问题是MATLAB和Visual Studio版本不匹配。如果我将MatLab 2016a与Visual Studio 2013一起使用,则不会出现问题,并且一切正常。
关于c++ - MatLab C++共享的DLL库初始化崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37553964/