2

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

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 );

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

4

1 回答 1

1

c++filt(1)说:

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

这似乎表明您尝试调用的函数是 C++ 类的成员函数。这意味着它有一个隐式的第一个参数——this指针。您的解决方法可以解决问题,因为您正在传递NULL this要使用的方法的指针。显然,它实际上根本没有使用该参数,但..

如果您不想以这种方式解决问题,请更改Interpolate::interpolateValue(int, int, int)为自由函数,而不是它所在的任何类的方法。

于 2013-05-29T17:17:57.967 回答