c++ - Qt和VS C++ dll函数返回值

标签 c++ string qt dll wstring

我正在尝试从 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);

结果“名称”变量将有“H”代替“通过!” 我做错了什么?

提前致谢

最佳答案

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

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);

变量“名称”现在应该是“已通过!”

在 QLibrary 类引用中仅提及支持

extern "C" __declspec(dllexport)

指令。

已更新感谢@MSalters

关于c++ - Qt和VS C++ dll函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7959897/

相关文章:

C# 比较具有相同值的多个字符串

c - 为什么我不能用这样的其他字符串替换一个字符串?

c++ - 如何将 QStandardItem 附加到两行中

user-interface - 在网络上运行 Qt 信号/插槽的任何想法?

c++ - 如何抑制来自 ON_BLOCK_EXIT 的警告(ScopeGuard 的一部分)

c++ - 在 armv7l (Odroid XU4) 上编译时出现 OpenCV "conflicting declaration"问题

c++ - 管道问题(破管)

c++ - 在 OpenGL 中创建环境堆栈

java - 生成 3000 字节的随机字符串

c++ - 在 Qt5/C++ 中向后查找文本文件(tail a file)