Biblioteca Visual Studio C ++ dll falha no aplicativo Qt
Eu tenho um problema de compartilhamento de dados "std :: string" entre biblioteca DLL do Microsoft Visual C ++ e programa Qt.
O que eu tenho são:Biblioteca DLL escrita no Visual C ++ 2010 Express, que exporta um método:
extern "C" __declspec(dllexport) int Init(ITest* commandTest);
Interface abstrata "ITest" e uma classe implementando:
class CTest: public ITest
{
public:
CTest();
virtual ~CTest();
virtual void getVersion(std::string & version) const;
};
Aplicativo Qt GUI que precisa:
* load the DLL dynamically
* instantiate CTest and pass it to exported Init method.
No "Init" da DLL, é chamado um método "CTest :: getVersion ()". Eu esperaria receber a string "& version" preenchida. O que eu recebo são falhas na linha quando eu preenho "& version" com uma nova string.
O que eu já fiz:baixado "bibliotecas Qt 4.8.3 para Windows (VS 2010, 235 MB)" dehttp://qt-project.org/downloads, instalou-o e selecionou-o nas configurações do projeto do QtCreator.
no QtCreator mudou de toolchain MinGW para o instalado com o MS Visual Studio 2010 Express.
Eu pensei que ele iria superar o problema, porque eu usei bibliotecas Qt compiladas com o VS 2010 e o Qt GUI também foi compilado com o toolchain VS C ++. Infelizmente o problema não foi embora, então eu tentei o último passo:
criei o aplicativo Win32 Console no Visual Studio, carreguei minha DLL via LoadLibrary, usei o método "Init" da mesma forma que fiz no Qt GUI ... e funcionou !!
Pequena observaçãoEm "CTest :: getVersion ()" estou imprimindo esta "versão" string passada por referência ao console. Ao usar o aplicativo do console VS C ++ como um host, ele é impresso corretamente. Ao usar o aplicativo Qt, a sequência "versão" é impressa com algum lixo (por exemplo, ┌►☻qwerty27)
Isso me faz pensar que o ABI do aplicativo Qt e minha DLL ainda é incompatível, mesmo quando usando as bibliotecas do Qt VS 2010 mencionadas acima.
Questões:O uso de bibliotecas do Qt para Windows (VS 2010) e do conjunto de ferramentas do Visual Studio não é suficiente para superar os problemas de compatibilidade do ABI?Isso significa que eu deveria compilar o framework Qt sozinho?Por favor, ajude - quaisquer idéias são bem vindas ...