这是我的C类的作业,它应该是动态库中的练习。我想出了如何做大部分工作,但我仍然坚持到最后一步。
基本上,我从指定的文件中获得一个函数,我可以使用dlsym调用它。但是,参数的数量和类型可以根据功能而变化。我通过argv []给出缩短的函数签名和参数本身。像printf这样的函数的缩短函数签名('Hello:%s,%d,%f',abc,10,12.4)将如下所示:
vccid {这是 v oid func的缩写( c har *, c har *,< strong>我 nt, d ouble)}
例如,如果我需要调用描述的printf函数,我的argv将如下所示:
[],[函数所在的文件名],[函数名称],[ vccid ],['Hello:%s,%d,%f'],[abc ],[10],[12.4]
我使用dlopen和dlsym来获取函数本身
typedef void *(*arbitrary1)();
...
int main(int argc, const char * argv[]) {
arbitrary1 f1;
void *handle = dlopen(argv[1], RTLD_LAZY);
*(void**)f1 = dlsym(handle, argv[2]);
...
}
现在,我的问题是:有没有办法将我从argv获得的参数传递给我的函数调用?所以最终结果将是
f1('Hello: %s %d %f', abc, 10, 12.4);
提前感谢您的帮助