Well, as long as the functions are declared __cdecl, you should be safe just doing a static cast on the function pointer to use as many parameters as you want. Something like this:

Code:
#include <stdio.h>

int __cdecl func1(int a,int b)
{
  printf("%d %d\n",a,b);
  return 1;
}

int __cdecl func2(int a,int b,int c)
{
  printf("%d %d %d\n",a,b,c);
  return 1;
}

int __cdecl func3(int a,int b,int c,int d)
{
  printf("%d %d %d %d\n",a,b,c,d);
  return 1;
}

typedef int (*ptr1)(int,int);
typedef int (*ptr2)(int,int,int);
typedef int (*ptr3)(int,int,int,int);

int main(void) { 

  int i;

  i=((ptr1)(&func3))(1,2);
  i=((ptr2)(&func2))(1,2,3);
  i=((ptr3)(&func1))(1,2,3,4);
  return 0;

}
should be perfectly safe.