在开发过程中调用第三方的动态库应该是不可避免的,调用DLL的方式也不算少,可以通过Win32 API、直接调用、Qt的API等诸多方式进行调用。
这里着重介绍一下Qt自带的API调用DLL的方法。
以调用DLLTest.dll中返回值为bool类型的Init()为例:
.h
#include <QLibrary>
class DLLTest
{
public:
DLLTest();
~DLLTest();
bool DLLTestInit();
bool DLLTestLoadLibrary();
private:
QLibrary m_Library;
};
.cpp
#include <.h>
//定义Init函数指针
typedef bool (__stdcall *Init)();
Init FunctionInit;
DLLTest::DLLTest()
{
}
DLLTest::~DLLTest()
{
}
bool PosAceKGType_WM::DLLTestInit()
{
//加载动态库
if(!DLLTestLoadLibrary())
{
return false;
}
//调用初始化函数
bool bRes = FunctionInit();
}
bool PosAceKGType_WM::DLLTestLoadLibrary()
{
if(!m_Library.isLoaded())
{
m_Library.setFileName("DLLTest.dll");
if(!m_Library.load())
{
qDebug() << "DLLTest.dll加载失败,"+m_Library.errorString();
return false;
}
FunctionInit = (Init)m_Library.resolve("Init");
if(!FunctionInit)
{
qDebug() << "Init()函数加载失败";
m_Library.unload();
return false;
}
}
return true;
}
有问题请留言,不忙的时候会看。
若对你有帮助,点赞收藏,经常更新