No, no es eso lo que busco, explico un poco mejor lo que pretendo hacer:
Estoy haciendo una plantilla que cifra llamadas al api, la idea es que funcione así:
EncryptApi<int> myMessageBox("MessageBoxA","USER32.DLL");
int retorno = myMessageBox(4, 0, "Cuerpo del mensaje", "Titulo :P", 0);
Para ello he sobrecargado el operador (). El primer parámetro es el número de parámetros que se pasarán al api y el tipo T es el valor de retorno del api. Luego los leo y los intento almacenar (como mejor se me ha ocurrido) así:
template <class T>
T EncryptApi<T>::operator ()(int numArg, ...)
{
T retorno;
vector <void*> args;
va_list listaArg;
va_start(listaArg, numArg);
for (int n=0; n<numArg; n++)
{
args.push_back(va_arg(listaArg, void*));
}
retorno = MessageBoxA((HWND)args[0], (LPCSTR)args[1], (LPCSTR)args[2], (UINT)args[3]);
va_end(listaArg);
return retorno;
}
Ese trozo es solo una prueba de un caso particular evidentemente xD
Si se utiliza el código así tal cual funciona sin problemas, el problema es obtener el tipo de dato para hacer el casting, que no se me ocurre como..
Además necesitaría crearme un puntero a función para poder llamar al api y tampoco se me ocurre muy bien como, aunque bueno, siempre podré meter asm inline, pero sigue estando el problema de saber si lo que se pasa es un puntero o no
En fin, alguna idea?