me encontré con el siguiente trozo de code.Imagine raro que tiene la siguiente typedef:punteros de función y número indeterminado de argumentos en C++
typedef int (*MyFunctionPointer)(int param_1, int param_2);
Y luego, en una función, que están tratando de ejecutar una función desde un archivo DLL de la siguiente manera:
LPCWSTR DllFileName; //Path to the dll stored here
LPCSTR _FunctionName; // (mangled) name of the function I want to test
MyFunctionPointer functionPointer;
HINSTANCE hInstLibrary = LoadLibrary(DllFileName);
FARPROC functionAddress = GetProcAddress(hInstLibrary, _FunctionName);
functionPointer = (MyFunctionPointer) functionAddress;
//The values are arbitrary
int a = 5;
int b = 10;
int result = 0;
result = functionPointer(a, b); //Possible error?
el problema es que no hay ninguna manera de saber si el functon cuya dirección nos dieron, con LoadLibrary toma dos enteros arguments.The nombre de la DLL es proporcionada por el usuario en tiempo de ejecución, se enumeran los nombres de las funciones exportadas y el usuario se toma contacto con el que lo prueba (nuevamente, en tiempo de ejecución: S: S). Entonces, al hacer la llamada de función en la última línea, ¿no estamos abriendo la puerta a posibles daños en la pila? Sé que esto compila, pero ¿qué tipo de error de tiempo de ejecución va a ocurrir en el caso de que estemos pasando argumentos incorrectos a la función a la que estamos apuntando?
Si no está seguro de qué funciones exactas exporta un dll (tipo exacto, pero * no * la convención de llamada), use Dependency Walker. –