И это всё МОЁ

Каким образом можно вызвать функцию по ссылке с передачей всех аргументов?

На данный момент у меня получился такой код:

#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 обязательно должна экспортироваться.








 ,