Biblioteka DLL Visual Studio C ++ ulega awarii w aplikacji Qt

Mam problem z udostępnianiem danych „std :: string” między biblioteką DLL MS Visual C ++ a programem Qt.

Mam to:

Biblioteka DLL napisana w Visual C ++ 2010 Express, która eksportuje jedną metodę:

extern "C" __declspec(dllexport) int Init(ITest* commandTest);

Abstrakcyjny interfejs „ITest” i klasa go implementująca:

class CTest: public ITest
{
public:
    CTest();
    virtual ~CTest();
    virtual void getVersion(std::string & version) const;
};

Aplikacja GUI Qt, która musi:

* load the DLL dynamically
* instantiate CTest and pass it to exported Init method.

W DLL „Init” wywoływana jest metoda „CTest :: getVersion ()”. Spodziewałbym się, że wypełni się ciąg „i wersja”. Zamiast tego na linii pojawiają się awarie, gdy wypełniam „i wersję” nowym ciągiem.

Co już zrobiłem:

pobrano „biblioteki Qt 4.8.3 dla Windows (VS 2010, 235 MB)”http://qt-project.org/downloads, zainstaluj go i zaznacz w ustawieniach projektu QtCreator.

w QtCreator przełączono z toolchaina MinGW na ten zainstalowany z MS Visual Studio 2010 Express.

Pomyślałem, że przezwycięży to problem, ponieważ użyłem bibliotek Qt skompilowanych z VS 2010, a GUI Qt również zostało skompilowane z toolchainem VS C ++. Niestety problem nie zniknął, więc spróbowałem ostatniego kroku:

utworzona aplikacja Win32 Console w Visual Studio, załadowała moją bibliotekę DLL przez LoadLibrary, użyła metody „Init” w taki sam sposób jak w GUI Qt ... i działała !!

Mała obserwacja

W „CTest :: getVersion ()” drukuję ten ciąg „wersji” przekazany przez odwołanie do konsoli. Podczas używania aplikacji konsoli VS C ++ jako hosta jest ona drukowana poprawnie. Podczas korzystania z aplikacji Qt - ciąg „wersji” jest drukowany ze śmieciami (np. ┌►☻qwerty27)

To sprawia, że ​​myślę, że aplikacja ABI Qt i moja biblioteka DLL są nadal niekompatybilne, nawet przy użyciu bibliotek Qt VS 2010 wymienionych powyżej.

Pytania:Czy korzystanie z bibliotek Qt dla Windows (VS 2010) i Visual Studio Toolchain nie wystarczy do rozwiązania problemów ze zgodnością ABI?Czy to znaczy, że powinienem sam skompilować framework Qt?Proszę o pomoc - wszelkie pomysły są mile widziane ...

questionAnswers(2)

yourAnswerToTheQuestion