Hola,
teniendo esto:
typedef bool (_funct)(char* buffer,int maxLength);
_funct * funct = (_funct*)GetProcAddress(library, "funct");
//Porque es posible llamar a un puntero funcion de esta manera? :
funct(..);
//Me parece mas logico asi:
(*funct)(..);
Saludos
Cita de: patilanz en 8 Julio 2015, 15:06 PM
Hola,
teniendo esto:
typedef bool (_funct)(char* buffer,int maxLength);
_funct * funct = (_funct*)GetProcAddress(library, "funct");
//Porque es posible llamar a un puntero funcion de esta manera? :
funct(..);
//Me parece mas logico asi:
(*funct)(..);
Saludos
Teniendo en cuenta que funct es un puntero, el compilador comprende que en assembler seria algo equivalente a lo siguiente:
push "funct";
push library;
call GetProcAdress;
mov funct,eax;
push maxLength;
push buffer;
call [funct];
add esp,8;
B#
Por parte de C, () lo interpreta <que yo sepa> igual en ambos casos. No te lo tomes como un fallo, sino como una ayuda al hacer funciones de callback, pues te ayuda a evitar andar poniendo (*)
Definiendo el tipo es lo mismo que haciendo un casting directo a la hora de usar una variable de algun tipo:
int var;
((void(__stdcall*)(int, int))var)(...);