2016-05-31 13 views
0

Ich verwende Matlab 2013a und Visual Studio 2013. Ich versuche MatLab kompilierte DLL aus einer C++ - Konsole-Anwendung zu verwenden. Meine einfache Matlab-Test-DLL und Konsolen-Anwendung ist für 64-Bit-Maschinen kompiliert (ich habe sichergestellt, dass sie 64bit via Dumpbin sind). Ich habe auch korrekte Version von MCR auf meinem Rechner installiert (auch wenn es nicht notwendig ist).MatLab C++ Gemeinsame Dll-Bibliothek Initialisierung Crash

Ich habe meinen Compiler mit dem Befehl "mbuild -setup" eingerichtet.

Ich kompiliere meine .m-Datei mit dieser Befehlszeile: "mcc-v -W cpplib: mylib -T Link: lib myFunc" erfolgreich.

In meiner Konsolenanwendung schließe ich diese Bibliotheken ein: mylib.lib, mclmcrrt.lib, mclmcr.lib, libmx.lib, libmat.lib und verwende die Bibliotheken in diesem Pfad "C: \ Programme \ MATLAB \ R2013a \ extern \ lib \ win64 \ microsoft "

Wenn ich mein Programm debugge, initialisiert es MCR erfolgreich mit diesem Aufruf:" mclInitializeApplication (NULL, 0) ", aber wenn ich" mylibInitialize() "aufrufen, um meine Bibliothek zu initialisieren Programm stürzt ab. Es wirft nicht einmal eine Lösung, daher kann ich es nicht mit try/catch blockieren. Es gibt eine unbehandelte Ausnahmefehler- und Zugriffssteuerungsfehlermeldung.

Dies sind Beispiel Debug Ausgabe Nachrichten, die ich habe;

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ - Ausnahme: Xercesc_2_7 :: NoSuchElementException am Speicherort 0x000000E263EF4E48.

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ Ausnahme: xsd_binder :: MalformedDocumentError an Speicherplatz 0x000000E263EF4E40.

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ Ausnahme: xercesc_2_7 :: NoSuchElementException an Speicherplatz 0x000000E263EF4E48.

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ Ausnahme: boost :: am Speicherplatz 0x000000E2643FF630 thread_interrupted.

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ Ausnahme: boost :: am Speicherplatz 0x000000E2642FFCD0 thread_interrupted.

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ Ausnahme: CryptoPP :: AES_PHM_Decryption :: InvalidCiphertextOrKey an Speicherplatz 0x000000E264EFB0F0.

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ Ausnahme: tfFailedException an Speicherplatz 0x000000E264EF4C10.

Erste-Chance-Ausnahme bei 0x00007FFA22761F08 in MatlabTest.exe: Microsoft C++ Ausnahme: varflowFailedException an Speicherplatz 0x000000E264EF9410. Der Thread 0x3550 wurde mit Code 0 (0x0) beendet. 'MatlabTest.exe' (Win32): Geladen 'C: \ Programme \ MATLAB \ R2013a \ bin \ win64 \ hgbuiltins.dll'. Die PDB-Datei kann nicht gefunden oder geöffnet werden.

Erste-Chance-Ausnahme bei 0x0000000000B46E60 (m_interpreter.dll) in MatlabTest.exe: 0xC0000005: Zugriffsverletzungsleseposition 0x0000000064EF3B90. Nicht behandelte Ausnahme bei 0x0000000000B46E60 (m_interpreter.dll) in MatlabTest.exe: 0xC0000005: Zugriff auf Leseort der Fehler 0x0000000064EF3B90 zugreifen.

Das Programm '[12952] MatlabTest.exe' wurde mit Code 0 (0x0) beendet.

Ich habe MCR auf einem anderen Computer installiert und versucht, diese Konsolenanwendung auszuführen. Ich habe das gleiche Ergebnis. Auch

habe ich versucht, Vigenere Beispiel die Loren, http://blogs.mathworks.com/loren/2011/02/03/creating-c-shared-libraries-and-dlls/#respond

Es hat nicht funktioniert entweder.

Haben Sie eine Idee, warum das passiert?

Dank

Antwort

0

Es Problem scheint, ist MATLAB und Mismatch-Visual Studio-Version. Wenn ich MatLab 2016a mit Visual Studio 2013 verwende, gibt es kein Problem und alles funktioniert perfekt.

0

Ich hatte das ähnliche Problem mit Matlab2017 + VS 2015. Wahrscheinlich gibt es einige Konflikte mit Java von MATLAB verwendet.

Ich habe es unter Verwendung folgender

const char *args[] = {"-nojvm"}; 
const int count = sizeof(args)/sizeof(args[0]); 
mclInitializeApplication(args, count)) 

statt

mclInitializeApplication(NULL,0) 
+0

Sie verlieren UI von Matlab (tun Sie wirklich brauchen, wenn es von C++ nennen?), Aber trotzdem ist es besser, dann Zugriffsverletzung. –