我和我的朋友正在做一个项目。
他给了我一个 .dll 文件,它可以激活网络摄像头并流式传输视图。
他还给了我一个用 VS2013 MFC 编写的小示例项目,用于演示该功能。
typedef int(*ExtportFuncA)(void);
typedef int(*Open)(void);
void Ctrydll2Dlg::OnBnClickedOk()
{
//CDialogEx::OnOK();
ExtportFuncA ga = NULL;
HINSTANCE hLib = LoadLibrary(_T("ShowImg.dll"));
if (hLib)
{
ga = (ExtportFuncA)GetProcAddress(hLib, "ExtportFuncA");
ga();
}
system("pause");
}
void Ctrydll2Dlg::OnBnClickedButton1()
{
Open gb = NULL;
HINSTANCE hLib = LoadLibrary(_T("ShowImg.dll"));
if (hLib)
{
gb = (ExtportFuncA)GetProcAddress(hLib, "Open");
int system = gb();
if (system == -1)
{
printf("not get device");
}
}
}
但是,我未能在 QT 项目中加载该 .dll 文件。
#include <QCoreApplication>
#include <QLibrary>
#include <QDebug>
typedef int (*ExportFuncA)(void);
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QLibrary lib("ShowImg.dll");
lib.load();
if(!lib.load())
{
qDebug() << "Cannot Open Library";
return 0;
}
ExportFuncA CLI = (ExportFuncA)lib.resolve("ExportFuncA");
if(!CLI)
{
qDebug() << "Cannot Load Function";
return 0;
}
printf("Hello World");
return a.exec();
}
错误总是显示“无法打开库”,这意味着 .dll 无法在开始时加载,
但是我朋友的演示项目在我的电脑上运行良好,我可以看到相机的图像。
我怀疑问题与 32 位和 64 位格式有关,
但由于我不熟悉 .dll 文件,任何建议将不胜感激。