使用dlsym导入的函数中的参数位置错误

时间:2013-05-29 17:12:09

标签: c++ qt dlsym

我有一个奇怪的问题。当我使用共享库中的参数调用导入的方法时,在那些方法中我有错误的参数。就像:

x = 1; y = 2; z = 3;
(*method)(x,y,z);

方法我有:

void method(int x, int y, int z){
    // x = 2, y = 3, z = 32432423 - something like this
}

我在这里导入:

QVector<int> (*interpolateValue)( int, int, int );
libHandle = dlopen( "plugins/libinterpolate.so", RTLD_LAZY );
*(void **)(&interpolateValue) = dlsym( libHandle, "_ZN11Interpolate16interpolateValueEiii" );

QVector<int> ys = (*interpolateValue)( lastY, newY, step );

我以这种方式解决了这个问题:

QVector<int> (*interpolateValue)( int*, int, int, int );
QVector<int> ys = (*interpolateValue)( NULL, lastY, newY, step );

但我认为这不是一种手段。

1 个答案:

答案 0 :(得分:1)

c++filt(1)说:

$ c++filt _ZN11Interpolate16interpolateValueEiii
Interpolate::interpolateValue(int, int, int)

这似乎表明您尝试调用的函数是C ++类的成员函数。这意味着它有一个隐含的第一个参数 - this指针。您的解决方法会修复问题,因为您正在传递NULL this指针以供使用该方法。事实上,它实际上并没有使用该参数,但是......

如果您不想以这种方式解决问题,请将Interpolate::interpolateValue(int, int, int)更改为免费功能,而不是其所在类别的方法。