背景:
用户提供一系列的dll,不提供头文件;用配置文件的方式说明接口名称,参数类型,以及参数值等信息;
根据GUI配置来实现某个dll中某个接口的调用;
大致思路如下:
int add(int a, int b,int c) {
return a + b+c;
}
int add1(int a, int b,int c,int d) {
return a + b+c + d;
}
typedef struct {
uint8_t para[100];
} combine_para;
typedef int (*general_fun)(...);
int main() {
general_fun func = (general_fun)add;
int a = 10;
int b = 12;
int c = 13;
int d = 0;
combine_para tmp;
memset(&tmp,0,sizeof(tmp));
memcpy(tmp.para, &a, sizeof(a));
memcpy(tmp.para + sizeof(a), &b, sizeof(b));
memcpy(tmp.para + sizeof(a)+sizeof(b), &c, sizeof(c));
int ret = func(tmp);
printf("%d\n", ret);
return 0;
}
特别说明:返回值类型要固定为int;无法兼容任意类型的返回值