是否可以将参数从argv传递给使用dlsym调用的函数?

时间:2016-11-10 12:54:37

标签: c dll argv dynamic-library

这是我的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);

提前感谢您的帮助

0 个答案:

没有答案