Qt加载依赖Opencv开发的第三方库:
Qt加载库有多种方法,其中:
一.加载静态库
客户只提供 : xx.dll
常规操作步骤:
1.打开“Depends.exe”工具,查看接口和依赖的库:
如上图所示:
接口函数:CreateLayoutSolution
依赖的库:opencv_core248.dll、opencv_highgui248.dll、opencv_imgproc248.dll。
二.使用LoadLibrary加载库
1.把第三方库和依赖的opencv库,放到Qt编译目录中:
如:把PlateLayout.dll、opencv_core248.dll、opencv_highgui248.dll、opencv_imgproc248.dll放到Release目录中;
2.加载库:
下面展示一些 内联代码片
。
QString dllName = "PlateLayout";
std::wstring wlpstr = dllName.toStdWString();
LPCWSTR lpcwStr = wlpstr.c_str();
mDll = LoadLibrary(lpcwStr);
if(mDll == NULL)
{
DWORD d = GetLastError();
qDebug() << "load lib:PlateLayout error!" << d;
}
else
qDebug() << "load ok";
//结果
load ok
LoadLibrary加载库,库名称为其参数;
GetLastError获得系统最后的错误结果:
193:找不到依赖的库
注意:
1.实际测试中使用msvc2015 64bit编译器,加载32位dll,会报193号错误,需要把第三方库和依赖的库改为64位编译器即可通过。
三:使用接口
直接给个例子:
下面展示一些 内联代码片
。
typedef void(*FUNC)(char* sFilePath, vector<Point2f> vecPos, vector<Point2f> vecSize, int nMaxNum, int nSize,
int nSwitchNum, int nThreadNum, vector<SolutionInfo> &vecSolutions);
FUNC CreateLayoutSolution = (FUNC)GetProcAddress(hInstance, "CreateLayoutSolution");
if(NULL == CreateLayoutSolution)
{
return -1;
}
char* chImagePath = "H:\\项目\\排料算法\\outline.png";
// 调用函数接口
CreateLayoutSolution(chImagePath, vecPos, vecSize, 500, 30, 30, 8, vecSolutions);
四:释放库资源
FreeLibrary(hInstance);/释放库资源
//20200128调试记录