DLL библиотеки Visual Studio C ++ вылетает в приложении Qt
У меня проблема с разделениемстанд :: строка» данные между библиотекой MS Visual C ++ DLL и программой Qt.
Что у меня есть:Библиотека DLL написана на Visual C ++ 2010 Express, которая экспортирует один метод:
extern "C" __declspec(dllexport) int Init(ITest* commandTest);
Абстрактный интерфейс »ITest» и класс, реализующий это:
class CTest: public ITest
{
public:
CTest();
virtual ~CTest();
virtual void getVersion(std::string & version) const;
};
Приложение Qt GUI, которое должно:
* load the DLL dynamically
* instantiate CTest and pass it to exported Init method.
В DLLИнициирование "а"CTest :: GetVersion ()» метод называется. Я'Я ожидаю, что получит "&версия" заполненная строка. Вместо этого я получаю сбои в строке при заполнении "&версия" с новой строкой.
Что я уже сделал:скачал "Библиотеки Qt 4.8.3 для Windows (VS 2010, 235 МБ) » отhttp://qt-project.org/downloads, установил и выбрал его в QtCreator 'Настройки проекта.
в QtCreator переключился с инструментария MinGW на тот, который установлен с MS Visual Studio 2010 Express.
Я думал, что это решит проблему, потому что я использовал библиотеки Qt, скомпилированные с VS 2010, и графический интерфейс Qt также был скомпилирован с помощью инструментальной цепи VS C ++. К сожалению, проблема не исчезла, поэтому я попробовал сделать последний шаг:
создал консольное приложение Win32 в Visual Studio, загрузил мою DLL через LoadLibrary, использовал "В этом" метод так же, как я делал в Qt GUI ... и это сработало !!
Небольшое наблюдениеВ "CTest :: GetVersion ()» Я печатаю этоверсия" строка передается по ссылке на консоль. При использовании консольного приложения VS C ++ оно распечатывается корректно. При использовании приложения Qt - "версия" строка напечатана с мусором вокруг (например, e►┌qwerty27)
Это заставляет меня думать, что ABI приложения Qt и моей DLL по-прежнему несовместимы даже при использовании библиотек Qt VS 2010, упомянутых выше.
Вопросы:Разве использования библиотек Qt для Windows (VS 2010) и набора инструментов Visual Studio недостаточно для преодоления проблем совместимости ABI?Означает ли это, что я должен скомпилировать каркас Qt самостоятельно?Пожалуйста, помогите - любые идеи приветствуются ...