在QT中导入DLL,没有.lib或.h

时间:2014-07-01 06:38:24

标签: qt dll

我在互联网上找不到合适的答案,所以我来找你。我们给了一个.dll文件,我有一个.xml文件来描述这个.dll中的每个函数。

现在我想要包含此.dll,但我在互联网上找到的每个答案都谈到.lib.h,是否有办法添加.dll文件到我的项目?

谢谢。

3 个答案:

答案 0 :(得分:3)

Here你可以找到我为QtSerialPort写的内容,为udev动态加载符号。

This是代码的核心原则:

QLibrary myLib("mylib");
typedef void (*MyPrototype)();
MyPrototype myFunction = (MyPrototype) myLib.resolve("mysymbol");
if (myFunction)
    myFunction();

如果您需要"全球"要从多个位置访问的实例,您还可以按如下方式实例化QLibrary

Q_GLOBAL_STATIC(QLibrary, udevLibrary)

答案 1 :(得分:0)

您可以使用QLibrary动态调用函数。以下示例在运行时从共享库中调用函数:

#include <QLibrary>
#include <QDebug>

typedef int (*call_func)(int arg1, int arg2);

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QLibrary library( "dynamic_library" );
    library.load();
    if( !library.isLoaded() )
    {
        qDebug() << "Cannot load library.";
        return 0;
    }
    call_func func = (call_func)library.resolve( "function1" );
    if( func)
    {
        func( 1, 2 );
    }

    return a.exec();
}

答案 2 :(得分:0)

您需要阅读.xml文件并为其生成.h文件。您可能还希望生成.def文件。 .def文件将用于生成链接器所需的导入库。

如果您可以显示xml文件的完整示例,那么利用Qt生成标头和定义文件应该是一件简单的事情。