C/Visual C - DLLs

 
Vista:

DLLs

Publicado por Clayder (11 intervenciones) el 08/08/2007 07:06:16
Hola a todos:

Recien comienzo a ver esto de C y tengo dudas con respecto a las librerias dll que yo hago; es decir, ¿como puedo hacer para llamar una funcion en una dll que yo creé??. Es bastante simple al parecer, pero no se como hacerlo. A ver si ayudan con un ejemplo basico.

Gracias de antemano.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:DLLs

Publicado por fernando.gomez (1603 intervenciones) el 08/08/2007 18:04:48
[Lo siguiente funciona para Windows].

Cada función que se exporta, se marca como tal en la DLL (usualmente a través de un archivo DEF). "Solo" tienes que cargar la librería y obtener la dirección de memoria de la función. ¿Cómo lo haces? Bueno, supongamos primero que en mi.dll tienes una función:

int mi_funcion(char* parm1, long param2);

Entonces cargamos la librería con LoadLibrary y luego cargamos obtenemos la dirección en memoria de la función vía GetProcAddress. Pero primero hay que crear un puntero a una función con el prototipo de la misma. Entonces nuestro código quedaría así:

typedef int (*MIFUNCION)(char*, long); // prototipo del puntero a funcion
HINSTANCE hDll = LoadLibrary(_T("mi.dll")); // cargamos dll

// obtenemos la función vía GetProcAddress, donde pasamos la instancia de la
// DLL y el nombre de la función a cargar
MIFUNCION lpFunc = (MIFUNCION)GetProcAddress(hDll, _T("mi_funcion"));

// empleamos la función de forma normal
lpFunc("hola mundo", 5L);

// liberamos la DLL
FreeLibrary(hDll);

Espero haberme explicado bien.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DLLs

Publicado por Pepe (1 intervención) el 21/10/2010 20:29:21
Muchas gracias. Funciona a la perfección.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:DLLs

Publicado por isaac (1 intervención) el 12/04/2011 02:14:01
Hola esta respuesta me sirvio mucho pero me sale un error que dice así:

Unhandled exception at 0x00831445 in hola.exe: 0xC0000005: Access violation reading location 0x00000004.

cuando llego a la parte de

// empleamos la función de forma normal
lpFunc("hola mundo", 5L);

Espero que me puedan asistir, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar