/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Como se hace una dll en dev-c

 
      Índice del Foro elrincondelc.com -> Dev-C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Nelbes



Registrado: 23 Oct 2004
Mensajes: 27

MensajePublicado: 19/01/2005 11:43 am
Título: Como se hace una dll en dev-c

Hola queria saber como se hace una dll en dev-c, la se hacer en visual c pero no en dev, lei el tutorial pero no tengo esa version del dev y cuando compilo el programa de test (el que usa la dll) me aparece un mensaje de error diciendo que no se encuentra la funcion que esta en la dll y no genra el ejecutable, osea el proyecto no tiene en cuenta la dll. La funcion esta declarada como DLLIMPORT en la cabecera del test y la dll y esta en la dll, la dll se compila bien. Gracias
Volver arriba
quique



Registrado: 30 Mar 2004
Mensajes: 720
Ubicación: Por ahí

MensajePublicado: 21/01/2005 6:46 am
Título:

Qué version de Dev-C++ tienes? Qué mensaje de error te da? (copialo y pegalo aquí)

Salu2
Volver arriba
Nelbes



Registrado: 23 Oct 2004
Mensajes: 27

MensajePublicado: 26/01/2005 3:32 pm
Título:

Los resultados son los siguientes:


[Linker error] undefined reference to `_imp___Z7funcionv'
C:\Documents.......[Build Error] [Proyecto1.exe] Error 1





Lo que yo hago es lo siguiente, por ejemplo:



#include <windows.h>

#include "dll.h"

/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);


/* Make the class name into a global variable */
char szClassName[ ] = "WindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
HINSTANCE hPrevInstance,
LPSTR lpszArgument,
int nFunsterStil)

{
HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof (WNDCLASSEX);

/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Use Windows's default color as the background of the window */
wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

/* Register the window class, and if it fails quit the program */
if (!RegisterClassEx (&wincl))
return 0;

/* The class is registered, let's create the program*/
hwnd = CreateWindowEx (
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"Windows App", /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

/* Make the window visible on the screen */
ShowWindow (hwnd, nFunsterStil);

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}

/* The program return-value is 0 - The value that PostQuitMessage() gave */
return messages.wParam;
}


/* This function is called by the Windows function DispatchMessage() */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;
switch (message) /* handle the messages */
{
case WM_DESTROY:
PostQuitMessage (0); /* send a WM_QUIT to the message queue */
break;
case WM_PAINT:
hdc = BeginPaint (hwnd, &ps) ;
GetClientRect (hwnd, &rect) ;
DrawText (hdc, funcion (), -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
EndPaint (hwnd, &ps) ;
return 0 ;
default: /* for messages that we don't deal with */
return DefWindowProc (hwnd, message, wParam, lParam);
}

return 0;
}





con la dll:





/* Replace "dll.h" with the name of your header */
#include "dll.h"
#include <windows.h>

DllClass::DllClass()
{

}


DllClass::~DllClass ()
{

}


BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;

case DLL_PROCESS_DETACH:
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;
}

/* Returns TRUE on success, FALSE on failure */
return TRUE;
}

char* funcion ()
{
static char c[] = "Esta puta dll funciona";
return c;
}





Y el archivo de cabecera:




#ifndef _DLL_H_
#define _DLL_H_

#if BUILDING_DLL
# define DLLIMPORT __declspec (dllexport)
#else /* Not BUILDING_DLL */
# define DLLIMPORT __declspec (dllimport)
#endif /* Not BUILDING_DLL */


class DLLIMPORT DllClass
{
public:
DllClass();
virtual ~DllClass(void);

private:

};

DLLIMPORT char* funcion ();

#endif /* _DLL_H_ */
Volver arriba
quique



Registrado: 30 Mar 2004
Mensajes: 720
Ubicación: Por ahí

MensajePublicado: 27/01/2005 2:38 am
Título:

A pesar de que no me has contestado qué versión del Dev Usas, da lo mismo, intentaré ayudarte Very Happy

1) En la sección "Descargas -> Cursos", hay un manual sobre hacer DLLs con Dev-C++. Bájatelo

2) Leete, si puedes, todo el manual, por si tienes algún concepto que no entiendes

3) Si no quieres leerlo o no tienes tiempo o ya sabes de qué va, vete al capítulo III del manual: "Cómo usan otros progamas la DLL"

4) Ahí está descrito como otros programas "linkan estáticamente" la DLL. Dependiendo de la versión del Dev-C++, el archivo LIB no se incluye automáticamente en el proyecto que usa la DLL, por lo que al intentar linkar, te da el error que dices: "undefined reference"

5) Comprueba que en las opciones de proyecto tienes incluído el archivo LIB - Para saber a qué me refiero, leete el Capítulo II del manual

Si tienes más preguntas, aquí estamos

Salu2
Volver arriba
Nelbes



Registrado: 23 Oct 2004
Mensajes: 27

MensajePublicado: 27/01/2005 12:34 pm
Título:

Perdon, mi version del dev es la 4.9.8.0, tambien lo actualicé y use la ultima. Leí el curso, pero no es para mi version del dev, en el dev del curso hay una ventana que enlaza el programa con la dll cuando uno crea la dll y en mi version no está. Yo agregue el archivo libNOMBRE.a en la casilla"Linker" de la pestaña "Parametros" de la ventana "Opciones de proyecto"en el proyecto del programa que usa la dll, aún asi no funciona, tengo el mismo error, que puede ser?. Encontrás algún error en mi codigo?......gracias
Volver arriba
quique



Registrado: 30 Mar 2004
Mensajes: 720
Ubicación: Por ahí

MensajePublicado: 31/01/2005 4:16 am
Título:

Yo tengo la version 4.9.9.0, pero he hecho lo siguiente:
1) Crear una dll con el nombre "DLL". (proyecto-nuevo-DLL)
2) He copiado lo que tu pones en tu post y pegado en mi proyecto
3) Compilado y linkado, sin problemas. Como resultado tengo:
- libdll.a
- dll.h
- dll.dll
4) He creado un nuevo proyecto windows (proyecto-nuevo-Aplicación windows)
5) He copiado y pegado lo que tu pones en el post
6) He intentado compilar, y efectivamente, me daba el error:
[Linker error] undefined reference to `_imp___Z7funcionv'
7) Igual que tú, agregue el archivo libdll.a: en mi versión (4.9.9.0), eso ve con "Proyeecto" -> "Opciones de proyecto" -> pestaña "Parametros" -> Botón "Añadir biblioteca u objeto".
Cool Vuelvo a compilar, y funciona

Parece que lo que tu haces está bien. Una pregunta que se me ocurre:
- Tienes el archivo libdll.a en LA MISMA CARPETA que el proyecto que USA la DLL?
- Y el .h? Y la DLL?

Wink

Salu2
Volver arriba
Nelbes



Registrado: 23 Oct 2004
Mensajes: 27

MensajePublicado: 31/01/2005 10:35 am
Título:

Si tengo todo en la misma carpeta. La verdad no se que puede ser, hago exactamente lo que tu has dicho, voy a intentar de nuevo. en la casilla de "Parametros" me aparece libdll.a nada mas supongo que igual que a vos, sin la ruta especificada, no se me ocurre que pasa. Gracias por todo.
Salu2
Volver arriba
Nelbes



Registrado: 23 Oct 2004
Mensajes: 27

MensajePublicado: 03/02/2005 5:32 pm
Título:

Encontre el error, probe bastante sistematicamente y llegue a la conclusion de que es por la version del software que estaba usando, asi que les recomiendo no usar la version del dev-c++ 4.9.8.0...garacias por todo
salu2
Volver arriba
anairam



Registrado: 22 Jun 2007
Mensajes: 1

MensajePublicado: 22/06/2007 2:53 pm
Título:

Hola! Me gustaría saber donde exactamente puedo conseguir el tutorial que sugirió Quique. Al menos acá no lo encontré. Soy nueva en el foro y me urge aprender a crear DLLs
Volver arriba
hynuser



Registrado: 11 Ago 2007
Mensajes: 2

MensajePublicado: 11/08/2007 11:42 am
Título:

Cita:

1) En la sección "Descargas -> Cursos", hay un manual sobre hacer DLLs con Dev-C++. Bájatelo


No encuentro el manual, podeis poner un link directo?


Saludos!!
Volver arriba
      Índice del Foro elrincondelc.com -> Dev-C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com