QLibrary 的解析函数只有一个参数?

QLibrary´s resolved function only has one argument?

本文关键字:有一个 参数 函数 QLibrary      更新时间:2023-10-16

让我们考虑一下qt文档中的这段代码:

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

这将加载一个.dll到内存中并解析符号"mysymbol",所以我可以使用"myFunction"。我在这里之前一直在工作。我也可以调用myFunction(arg_1)

但是当我调用myFunction(arg_1, arg_2)时,我得到一个"函数参数太多"错误。所以它真的只可能调用myFunction与1个参数还是有什么我错过了?

让我重写一下Mat的注释。我花了几个小时才找到我的问题。

假设dll:

extern "C" __declspec(dllexport) void function1()
{
    //code
}
extern "C" __declspec(dllexport) int function2(int arg1)
{
    //code
}
extern "C" __declspec(dllexport) char function3(int arg1, int arg2, int arg3)
{
    //code
}

的实现应该是这样的:

typedef void (*_function1)();
typedef int (*_function2)(int);
typedef char (*_function3)(int, int, int);
QLibrary myLib("mylib");
_function1 function1 = (_function1) myLib.resolve("function1");
_function2 function2 = (_function1) myLib.resolve("function2");
_function3 function3 = (_function1) myLib.resolve("function3");
if (function1 && function2 && function3)
{
    //implement them
    function1();
    int test = function2(123);
    char test1 = function3(1, 2, 3);
}
相关文章: