elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  como llamar funciones de otras dll que no sean de windows?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: como llamar funciones de otras dll que no sean de windows?  (Leído 5,023 veces)
SuperNovato

Desconectado Desconectado

Mensajes: 41


Ver Perfil
como llamar funciones de otras dll que no sean de windows?
« 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?


En línea

[L]ord [R]NA


Desconectado Desconectado

Mensajes: 1.513

El Dictador y Verdugo de H-Sec


Ver Perfil WWW
Re: como llamar funciones de otras dll que no sean de windows?
« Respuesta #1 en: 29 Diciembre 2010, 09:35 am »

cargalas con LoadLibrary y busca las funciones con GetProcAddress.


En línea

SuperNovato

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: como llamar funciones de otras dll que no sean de windows?
« Respuesta #2 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
En línea

Oblivi0n


Desconectado Desconectado

Mensajes: 392

Odio las ranas.


Ver Perfil
Re: como llamar funciones de otras dll que no sean de windows?
« Respuesta #3 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!
En línea

my_sistemas

Desconectado Desconectado

Mensajes: 65



Ver Perfil WWW
Re: como llamar funciones de otras dll que no sean de windows?
« Respuesta #4 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;
}
« Última modificación: 5 Marzo 2011, 02:11 am por e-spy » En línea

cuando uno es grande...
la calidad nunca la pierde...
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines