2013-05-29 25 views
2

我有一个奇怪的问题。当我使用共享库的参数调用导入的方法时,在这些方法中我有错误的参数。它是这样的:与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, int); 
QVector<int> ys = (*interpolateValue)(NULL, lastY, newY, step); 

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

我周围这样的方式进行工作,这个

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

回答

1

c++filt(1)说:

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

这似乎表明,你想调用的函数是一个C++类的成员函数。这意味着它有一个隐含的第一个参数 - this指针。您的解决方法修复了一些问题,因为您正在传递指向要使用的方法的NULLthis指针。显然事实上,它根本就没有使用这个参数,虽然..

如果你不想以这种方式解决问题,请将Interpolate::interpolateValue(int, int, int)更改为一个自由函数,而不是无论什么课程。

+0

现在很清楚。谢谢! –