我在MS Visual C++ DLL库和Qt程序之间共享"std :: string"数据时遇到问题.
用Visual C++ 2010 Express编写的DLL库,它导出一个方法:
extern "C" __declspec(dllexport) int Init(ITest* commandTest);
Run Code Online (Sandbox Code Playgroud)抽象界面"ITest"和实现它的类:
class CTest: public ITest
{
public:
CTest();
virtual ~CTest();
virtual void getVersion(std::string & version) const;
};
Run Code Online (Sandbox Code Playgroud)Qt GUI应用程序需要:
* load the DLL dynamically
* instantiate CTest and pass it to exported Init method.
Run Code Online (Sandbox Code Playgroud)在DLL的"Init"中,调用"CTest :: getVersion()"方法.我希望它会填充"&version"字符串.当我用新字符串填充"&version"时,我得到的是崩溃.
从http://qt-project.org/downloads下载了"Qt libraries 4.8.3 for Windows(VS 2010,235 MB)" ,安装它并在QtCreator的项目设置中选择它.
在QtCreator中从MinGW工具链切换到使用MS Visual Studio 2010 Express安装的工具链.
我认为它将克服这个问题,因为我使用了VS 2010编译的Qt库,Qt GUI也用VS C++工具链编译.不幸的是问题没有消失,所以我尝试了最后一步:
在Visual Studio中创建Win32控制台应用程序,通过LoadLibrary加载我的DLL,使用"Init"方法,就像我在Qt GUI中一样...并且它工作!
在"CTest :: …