Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: my_sistemas en 8 Marzo 2011, 02:26 am



Título: Usar DLL desde C++
Publicado por: my_sistemas en 8 Marzo 2011, 02:26 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;
}


Título: Re: Usar DLL desde C++
Publicado por: Eternal Idol en 9 Marzo 2011, 12:56 pm
Si yo tengo las funciones de una DLL, una es Wipe y es bolean es decir true o false. y la otra es connect

"es boolean" no dice nada. ¿Tiene un solo parametro que es un boolean? ¿El tipo de retorno es boolean? Entiendo que es lo primero por esta notacion que no es C/C++:

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

Fijate que devuelven LoadLibrary y GetProcAddress en primer lugar. Para ver los nombres de las funciones exportadas por una DLL podes usar el Dependency Walker (http://www.dependencywalker.com/).

Pero en el caso de ConnectAnyUSB tendria que ser asi:

Código
  1. #include <windows.h>
  2.  
  3. typedef void(__stdcall *ConnectAnyUSB_ptr)(DWORD nMaxTimeoutMs, DWORD nResetTimeOutMs);
  4.  
  5. int main()
  6. {
  7. HINSTANCE hDll = LoadLibrary("midll.dll"); // carga la dll
  8. ConnectAnyUSB_ptr ConnectAnyUSB_fn = (ConnectAnyUSB_ptr)GetProcAddress(hDll, "ConnectAnyUSB"); //obtiene el puntero
  9. ConnectAnyUSB_fn(50, 10); // ejecuta la funcion
  10. FreeLibrary(hDll);
  11. return 0;
  12. }

PD. Si la funcion Wipe necesita un parametro boolean entonces arregla el codigo siguiendo la logica del anterior.


Título: Re: Usar DLL desde C++
Publicado por: my_sistemas en 9 Marzo 2011, 23:47 pm
Me da un error en tiempo de ejecucion... como podria usar las funciones de la DLL... :(


Título: Re: Usar DLL desde C++
Publicado por: Eternal Idol en 10 Marzo 2011, 00:11 am
Fijate que devuelven LoadLibrary y GetProcAddress en primer lugar.


Título: Re: Usar DLL desde C++
Publicado por: my_sistemas en 11 Marzo 2011, 02:10 am
Aqui lo que se de la DLL

Código:

//BBCFPCOM 1.0 Type Library
Interface ICFPGRSCOM;
GUID = {33CF20BC-B452-4529-B78E-B48E821AF3A8};

  //Connect to Any USB device found
  function ConnectAnyUSB(nMaxTimeoutMs: I4; nResetTimeOutMs: I4): HResult; stdcall;
  //method ConnectToBootrom
  function ConnectToBootrom: HResult; stdcall;
  //Terminate all interfaces
  function Disconnect: HResult; stdcall;
  //Erase files and OS
  function Wipe(bWipeOS: Bool): HResult; stdcall;

Necesito Conectar por USB
luego conectar al Boot Room para liego mandar la funcion Wipe.