2013-05-29 24 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

現在很清楚。謝謝! –