gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:35 37 4
gpt4 key购买 nike

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

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

但我认为这不是手段。

最佳答案

c++filt(1)说:

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

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

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

关于c++ - 使用 dlsym 导入的函数中的参数位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820055/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com