我有一个问题,分享微软的Visual C ++ DLL库和Qt程序之间“的std :: string”数据。
我有什么分别是:
DLL库用Visual C ++ 2010速成,其中出口一个方法:
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 MB)”从http://qt-project.org/downloads ,安装了它,在QtCreator的项目设置中选择它。
在QtCreator从MinGW的工具链切换到一个与微软的Visual Studio 2010中快速安装。
我认为这将解决这个问题,因为我用VS 2010和Qt GUI编译还与VS C ++编译工具链,然后Qt库。 不幸的是,问题并没有消失,所以我想最后一步:
在Visual Studio中创建Win32控制台应用程序,通过加载调用LoadLibrary我的DLL,使用“初始化”方法相同的方式,我做了Qt中的GUI ...和它的工作!
小观察
在“CTEST :: getVersion()”我打印参考控制台通过这个“版本”的字符串。 当使用VS C ++控制台应用程序作为宿主其被正确地打印出来。 当使用Qt应用 - “版本”字符串印刷有周围的一些垃圾(例如┌►☻qwerty27)
这让我觉得,Qt的应用程序,我的DLL的ABI仍是不兼容的,使用Qt VS上面提到的2010个库时也是如此。
问题:
- 正在使用的Windows(VS 2010)Qt库和Visual Studio工具链不足以克服ABI兼容性问题?
- 这是否意味着我应该编译我自己的Qt框架?
- 请帮助 - 任何想法,欢迎...