Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SuperNovato en 29 Diciembre 2010, 02:20 am



Título: como llamar funciones de otras dll que no sean de windows?
Publicado por: SuperNovato en 29 Diciembre 2010, 02:20 am
holas tengo una dll en vb6 :
Código:
public function sumar(n1 as integer, n2 as integer) as integer
sumar = n1 + n2
end function


public sub mensaje(cuerpo as string, titulo as string)
MessageBox 0, cuerpo, titulo, 64
end sub

esta dll la hice segun el tuto de elguille para que sea estandar, puedo llamarla desde otro prog. en vb6, ahora como podria hacer que mi prog en c++ pueda hacer uso de las funciones contenidas?


Título: Re: como llamar funciones de otras dll que no sean de windows?
Publicado por: [L]ord [R]NA en 29 Diciembre 2010, 09:35 am
cargalas con LoadLibrary y busca las funciones con GetProcAddress.


Título: Re: como llamar funciones de otras dll que no sean de windows?
Publicado por: SuperNovato en 30 Diciembre 2010, 06:45 am
ok, busque lo q dijiste y encontre :

Código:
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
...HINSTANCE hDLL;               // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1;    // Function pointer
DWORD dwParam1;
UINT  uParam2, uReturnVal;

hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
   lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
                                           "DLLFunc1");
   if (!lpfnDllFunc1)
   {
      // handle the error
      FreeLibrary(hDLL);
      return SOME_ERROR_CODE;
   }
   else
   {
      // call the function
      uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
   }
}

salu2


Título: Re: como llamar funciones de otras dll que no sean de windows?
Publicado por: Oblivi0n en 31 Diciembre 2010, 16:02 pm
Si, ese ejemplo es correcto, ( es el del msdn no?  :xD )

en el comando loadlibrary tienes que poner la ruta de tu dll, si solo pones el nombre y .dll (kernel32.dll por ejemplo) buscara la Dll en el directorio de windows (en system32 ), y la funcion te devuelve el handle de la misma
Código:
  HINSTANCE hDLL 

(esto por si no quedaba claro xD)

El problema es que tienes que saber el nombre de las funciones, nose si existe algun modo de saber las funciones de una Dll  :( , lo investigare,

saludos!


Título: Re: como llamar funciones de otras dll que no sean de windows?
Publicado por: my_sistemas en 5 Marzo 2011, 01:29 am
Si yo tengo las funciones de una DLL, una es Wipe y es bolean es decir true o false. y la otra es connect

en DevC++ me lanza un error al momento de querer ejecutarlo

//Wipe
function Wipe(bWipeOS: Bool): HResult; stdcall;

Código:
#include <windows.h>

typedef void(__stdcall *PF)();

int main()
{
HINSTANCE hDll = LoadLibrary("midll.dll"); // carga la dll
PF Wipe = (PF)GetProcAddress(hDll, "Wipe"); //obtiene el puntero
Wipe(); // ejecuta la funcion
FreeLibrary(hDll);
return 0;
}

la funcion seria "wipe" o "wipe 1" o "wipe true" con todas me da un error al ejecutar la funcion.

igualmente cuando quiero utilizar otra funcion q es conect, el cual debe ir acompanado de un timeout es decir:

Conect timeuot, resettimeout

como lo escribiria?

//Connect to Any USB device found
function ConnectAnyUSB(nMaxTimeoutMs: I4; nResetTimeOutMs: I4): HResult; stdcall;

Código:
#include <windows.h>

typedef void(__stdcall *PF)();

int main()
{
HINSTANCE hDll = LoadLibrary("midll.dll"); // carga la dll
PF Conn = (PF)GetProcAddress(hDll, "ConnectAnyUSB 50, 10"); //obtiene el puntero
Conn(); // ejecuta la funcion
FreeLibrary(hDll);
return 0;
}