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 Beobachtung

In "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 ...

Antworten auf die Frage(2)

Ihre Antwort auf die Frage