VB6:
Código
Public Function Sumar(ByVal a As Integer, ByVal b As Integer) As Integer Sumar = a + b End Function
C:
Código
int sumar(int a, int b) { return a + b; }
En el primer programa (VB6), Sumar() se encuentra en la dirección 0x0401BD0. En el segundo (C), sumar() está en 0x0401334.
Ahora bien, creo una DLL en C y hago lo siguiente:
Código
typedef int (__stdcall *exe_sumar_ptr)(int, int); ... char result[50] = ""; exe_sumar_ptr exe_sumar; exe_sumar = (exe_sumar_ptr)(0x0401334); MessageBox(0, result, "Resultado", MB_OK); ...
La inyecto en el programa en C y funciona perfectamente, llama a la función sumar() y devuelve como valor 10 (5+5, correcto!). Ahora el problema es en el programa de VB6. Recompilo la DLL con la nueva dirección (0x0401BD0) y la función siempre retorna 0. Según la MSDN, el equivalente del tipo Integer de VB6 es long, así que intenté lo siguiente:
Código
typedef long (__stdcall *exe_sumar_ptr)(long, long);
Pero el problema persiste. Alguna idea de que puede estar sucediendo?
Les agradezco de antemano su ayuda y saludos!!