Qt和vc++ dll函数的返回值
Qt and VS C++ dll function returning value
我正试图从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++类型。
如果失败,您将获得未定义行为。你很不幸,如果它直接坠毁就好了。
相关文章:
- 从python中调用C++函数并获取返回值
- 编译器警告:执行到达值返回函数的末尾而不返回值
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 程序不向函数返回值
- 如何在另一个函数中使用返回值作为参数?
- 编写以 C++ 为单位返回值的函数
- 了解在返回值之前和之后使用 EAX 的函数调用
- 当我使用 void 函数的返回值(通过强制转换函数指针)时,究竟会发生什么?
- 如何在不使用临时变量的情况下取消引用返回指针的函数的返回值?
- 如何将不可移动和不可复制的函数返回值获取到数组中
- G++ 编译器是否在未使用返回值的情况下将 constexpr 函数视为常规函数?
- 为什么当你将函数的返回值乘以零时它不会短路?
- 函数的返回值类型是别名 ***或 *** 布尔值
- 如何在没有返回值的情况下使用(特征)unaryExpr 和 lambda 函数?
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 为什么这个"ctypes"包装函数的返回值是"c_long(0)"而不是&quo
- 函数不显示返回值 - C++
- 结构新手,我对如何从 void 函数中返回值并将其放入另一个函数感到困惑
- 将 void 函数更改为返回值函数
- 返回值函数中结构成员赋值的额外拷贝