从Qt调用DLL中的函数(c ++)

时间:2017-04-12 12:34:29

标签: c++ qt dll

我想使用从这里下载的MediaInfo.dll [DLL v0.7.94] [1]

[1]:https://mediaarea.net/bg/MediaInfo/Download/Windows。我的问题是如何使用Qt框架

在这个.dll中调用一些函数
#include <QCoreApplication>
#include <QLibrary>
#include <QDebug>

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

    if (QLibrary::isLibrary("MediaInfo.dll")) { // C:/MediaInfo.dll
      QLibrary lib("MediaInfo.dll");
      lib.load();
      if (!lib.isLoaded()) {
        qDebug() << lib.errorString();
      }

      if (lib.isLoaded()) {
        qDebug() << "success";
      }
    }

    return a.exec();
}

3 个答案:

答案 0 :(得分:1)

为什么要在有C / C ++绑定时使用QLibrary?

Include file with functions prototypes
Example with dynamic call of the DLL

有点隐藏,但所有内容都包含在您在问题中提供的链接中的DLL zip包中。

MediaInfo的开发人员Jérôme

答案 1 :(得分:0)

您需要声明一个函数原型并获取指向DLL中函数的指针。

// Start holding
jQuery.holdReady(true);

// ...later, when you want to stop holding (perhaps after a timer delay)...
jQuery.holdReady(false);

有关QLibrary的更多信息,请参阅

答案 2 :(得分:0)

您在QLibrary文档中有一个很好的例子。基本上你必须知道函数名称(符号)及其原型。

#include <QCoreApplication>
#include <QLibrary>
#include <QDebug>

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

    if (QLibrary::isLibrary("MediaInfo.dll")) { // C:/MediaInfo.dll
      QLibrary lib("MediaInfo.dll");
      lib.load();
      if (!lib.isLoaded()) {
        qDebug() << lib.errorString();
      }

      if (lib.isLoaded()) {
        qDebug() << "success";

        // Resolves symbol to
        // void the_function_name()
        typedef void (*FunctionPrototype)();
        auto function1 = (FunctionPrototype)lib.resolve("the_function_name");

        // Resolves symbol to
        // int another_function_name(int, const char*)
        typedef int (*AnotherPrototypeExample)(int, const char*);
        auto function2 = (AnotherPrototypeExample)lib.resolve("another_function_name");

        // if null means the symbol was not loaded
        if (function1) function1();
        if (function2) int result = function2(0, "hello world!");
      }
    }

    return a.exec();
}