Qt和vc++ dll函数的返回值



我正试图从Qt中连接的DLL中获得std::string/std::wstring返回值,我对此有问题。

DLL中的

代码:

using namespace std;
extern "C++" __declspec(dllexport) string test()
{
    return "Passed!";
}

代码在我的Qt应用程序(Qt Creator):

typedef std::string (*Test)();
QLibrary *lib = new QLibrary("dllname");
lib->load();
.... dll load check ....
Test test = (Test) lib->resolve("test");
std::string s = test();
QString name = QString::fromStdString(s);

result "name"变量将用"H"代替"Passed!"我做错了什么?

Thanks in advance

谢谢你的评论,我已经做到了:

extern "C" __declspec(dllexport) int test(wchar_t* out)
{
    wcscpy_s(out, MAX_PATH, L"Passed!"); // I'm using sys paths in my app, 
                                           // so MAX_PATH is ok for me
    return 0;
}

Qt的一面:

typedef int (*Test)(wchar_t*);
QLibrary *lib = new QLibrary("dllname");
lib->load();
.... dll load check ....
Test test = (Test) lib->resolve("test");
wchar_t s[MAX_PATH];
test(s);
QString name = QString::fromWCharArray(s);

变量"name"现在应该是"Passed!"

在QLibrary类引用中说只支持

extern "C" __declspec(dllexport)

指令。

谢谢@MSalters

问题是extern "C++"函数的名称被曲解了。这允许重载。extern "C"函数不能重载

QLibrary不能处理重载,也不能处理名称混淆。因此需要extern "C"函数。然而,这些可以仍然使用c++类型。

如果失败,您将获得未定义行为。你很不幸,如果它直接坠毁就好了。

最新更新