Visual Studio C ++ DLL-Bibliothek stürzt in Qt-Anwendung
Ich habe ein Problem beim Teilen von "std :: string" -Daten zwischen der MS Visual C ++ - DLL-Bibliothek und dem Qt-Programm.
Was ich habe, sind:In Visual C ++ 2010 Express geschriebene DLL-Bibliothek, die eine Methode exportiert:
extern "C" __declspec(dllexport) int Init(ITest* commandTest);
Abstraktes Interface "ITest" und eine Klasse, die es implementiert:
class CTest: public ITest
{
public:
CTest();
virtual ~CTest();
virtual void getVersion(std::string & version) const;
};
Qt GUI-Anwendung, die Folgendes muss:
* load the DLL dynamically
* instantiate CTest and pass it to exported Init method.
In DLLs "Init" wird eine "CTest :: getVersion ()" Methode aufgerufen. Ich würde erwarten, dass die Zeichenfolge "& version" ausgefüllt wird. Stattdessen stürzt die Zeile ab, wenn "& version" mit einer neuen Zeichenfolge gefüllt wird.
Was ich schon gemacht habe:lud "Qt-Bibliotheken 4.8.3 für Windows (VS 2010, 235 MB)" von herunterhttp://qt-project.org/downloads, installiert und in den Projekteinstellungen von QtCreator ausgewählt.
In QtCreator wurde von der MinGW-Toolchain auf die mit MS Visual Studio 2010 Express installierte Toolchain umgestellt.
Ich dachte, dass dies das Problem lösen wird, da ich mit VS 2010 kompilierte Qt-Bibliotheken verwendet habe und die Qt-GUI damals auch mit der VS C ++ - Toolchain kompiliert wurde. Leider war das Problem nicht verschwunden, also habe ich den letzten Schritt versucht:
Win32-Konsolenanwendung in Visual Studio erstellt, meine DLL über LoadLibrary geladen, "Init" -Methode wie in Qt GUI verwendet ... und es hat funktioniert !!
Kleine BeobachtungIn "CTest :: getVersion ()" drucke ich diese "Versions" -String, die als Referenz an die Konsole übergeben wurde. Wenn Sie die VS C ++ - Konsolen-App als Host verwenden, wird sie korrekt ausgedruckt. Bei Verwendung der Qt-App wird die "Versions" -Zeichenfolge mit etwas Müll herum gedruckt (z. B. ┌►┌qwerty27).
Dies lässt mich glauben, dass ABI von Qt App und meiner DLL immer noch nicht kompatibel ist, selbst wenn die oben genannten Qt VS 2010-Bibliotheken verwendet werden.
Fragen:Reicht die Verwendung von Qt-Bibliotheken für Windows (VS 2010) und die Visual Studio-Toolchain nicht aus, um ABI-Kompatibilitätsprobleme zu lösen?Bedeutet das, dass ich das Qt-Framework selbst kompilieren sollte?Bitte helfen Sie - alle Ideen sind willkommen ...