como llamar funciones de otras dll que no sean de windows?

Iniciado por SuperNovato, 29 Diciembre 2010, 02:20 AM

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

SuperNovato

holas tengo una dll en vb6 :
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?

[L]ord [R]NA

cargalas con LoadLibrary y busca las funciones con GetProcAddress.

SuperNovato

ok, busque lo q dijiste y encontre :

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

Oblivi0n

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
  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!

my_sistemas

#4
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...