Каким образом можно вызвать функцию по ссылке с передачей всех аргументов?
На данный момент у меня получился такой код:
#define EXTERN_DLL_EXPORT extern "C" __declspec(dllexport)
typedef void*(*any_fptr)(...);
EXTERN_DLL_EXPORT void* invoke5(const any_fptr &fptr, void** arg1, void** arg2, void** arg3, void** arg4, void** arg5) {
return fptr(arg1, arg2, arg3, arg4, arg5);
}
EXTERN_DLL_EXPORT void* invoke10(const any_fptr &fptr, void** arg1, void** arg2, void** arg3, void** arg4, void** arg5, void** arg6, void** arg7, void** arg8, void** arg9, void** arg10) {
return fptr(arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9, arg10);
}
Опытным путем установлено, что необязательно указывать все аргументы функций invoke5 / invoke10, т.е. вот так invoke работает:
invoke5(&fptr, arg1, arg2);
invoke10(&fptr, arg1, arg2, arg3);
Хочу сделать реализацию красивее, что-то вроде:
EXTERN_DLL_EXPORT void* invoke(const any_fptr &fptr, void** args...) {
return fptr(args);
}
Но не понимаю как это сделать без шаблонов.
Функция invoke обязательно должна экспортироваться.