Usar DLL desde C++

Iniciado por my_sistemas, 8 Marzo 2011, 02:26 AM

0 Miembros y 1 Visitante están viendo este tema.

my_sistemas

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;

#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;

#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;
}
cuando uno es grande...
la calidad nunca la pierde...

Eternal Idol

Cita de: e-spy 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

"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.

Pero en el caso de ConnectAnyUSB tendria que ser asi:

Código (cpp) [Seleccionar]
#include <windows.h>

typedef void(__stdcall *ConnectAnyUSB_ptr)(DWORD nMaxTimeoutMs, DWORD nResetTimeOutMs);

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


PD. Si la funcion Wipe necesita un parametro boolean entonces arregla el codigo siguiendo la logica del anterior.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

my_sistemas

Me da un error en tiempo de ejecucion... como podria usar las funciones de la DLL... :(
cuando uno es grande...
la calidad nunca la pierde...

Eternal Idol

Fijate que devuelven LoadLibrary y GetProcAddress en primer lugar.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

my_sistemas

Aqui lo que se de la DLL



//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.
cuando uno es grande...
la calidad nunca la pierde...