Я использую Matlab 2013a и Visual Studio 2013. Я пытаюсь использовать скомпилированную dll MatLab из консольного приложения C++. Моя простая тестовая dll и консольное приложение Matlab скомпилированы для 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\микрософт"
Когда я отлаживаю свою программу, она успешно инициализирует MCR, используя этот вызов: "mclInitializeApplication(NULL, 0)", но когда я вызываю "mylibInitialize()" для инициализации моей библиотеки, программа аварийно завершает работу. Он даже не вызывает исключение, поэтому я не могу обработать его с помощью блока try/catch. Это дает необработанное исключение и сообщение об ошибке доступа.
Это примеры выходных сообщений отладки, которые я получил;
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: xercesc_2_7::NoSuchElementException в ячейке памяти 0x000000E263EF4E48.
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: xsd_binder::MalformedDocumentError в ячейке памяти 0x000000E263EF4E40.
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: xercesc_2_7::NoSuchElementException в ячейке памяти 0x000000E263EF4E48.
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: boost::thread_interrupted в ячейке памяти 0x000000E2643FF630.
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: boost::thread_interrupted в ячейке памяти 0x000000E2642FFCD0.
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: CryptoPP::AES_PHM_Decryption::InvalidCiphertextOrKey в ячейке памяти 0x000000E264EFB0F0.
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: tfFailedException в ячейке памяти 0x000000E264EF4C10.
Исключение первого шанса по адресу 0x00007FFA22761F08 в MatlabTest.exe: исключение Microsoft C++: varflowFailedException в ячейке памяти 0x000000E264EF9410. Поток 0x3550 завершился с кодом 0 (0x0). «MatlabTest.exe» (Win32): загружен «C:\Program Files\MATLAB\R2013a\bin\win64\hgbuiltins.dll». Не удается найти или открыть файл PDB.
Исключение первого шанса по адресу 0x0000000000B46E60 (m_interpreter.dll) в MatlabTest.exe: 0xC0000005: место чтения нарушения прав доступа 0x0000000064EF3B90. Необработанное исключение по адресу 0x0000000000B46E60 (m_interpreter.dll) в MatlabTest.exe: 0xC0000005: место чтения нарушения прав доступа 0x0000000064EF3B90.
Программа «[12952] MatlabTest.exe» завершилась с кодом 0 (0x0).
Я установил MCR на другую машину и попытался запустить это консольное приложение. Я получил тот же результат.
Я также попробовал пример Лорен Виженера, http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#respond
Это тоже не сработало.
У вас есть идеи, почему это происходит?
Спасибо