Hola nuevamente foreros. Estoy intentando llamar una función de un proceso externo. Tengo 2 procesos, uno está en C y el otro en VB6. Las funciones de ambos serían algo así:
VB6:
Public Function Sumar(ByVal a As Integer, ByVal b As Integer) As Integer
Sumar = a + b
End Function
C:
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:
typedef int (__stdcall *exe_sumar_ptr)(int, int);
...
char result[50] = "";
exe_sumar_ptr exe_sumar;
exe_sumar = (exe_sumar_ptr)(0x0401334);
sprintf(result
, "Resultado: %d\n", exe_sumar
(5, 5)); 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:
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!!