0

我和我的朋友正在做一个项目。

他给了我一个 .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 文件,任何建议将不胜感激。

4

0 回答 0