我有一个奇怪的问题。当我使用共享库中的参数调用导入的方法时,在那些方法中我有错误的参数。就像:
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 );
但我认为这不是一种手段。
答案 0 :(得分:1)
$ c++filt _ZN11Interpolate16interpolateValueEiii
Interpolate::interpolateValue(int, int, int)
这似乎表明您尝试调用的函数是C ++类的成员函数。这意味着它有一个隐含的第一个参数 - this
指针。您的解决方法会修复问题,因为您正在传递NULL
this
指针以供使用该方法。事实上,它实际上并没有使用该参数,但是......
如果您不想以这种方式解决问题,请将Interpolate::interpolateValue(int, int, int)
更改为免费功能,而不是其所在类别的方法。