• Viernes 15 de Noviembre de 2024, 02:34

Autor Tema:  Crear Dll  (Leído 2558 veces)

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Crear Dll
« en: Miércoles 11 de Mayo de 2005, 20:21 »
0
Alguien podria explicarme como crear una DLL(Win-32 Dinamik-link library) en Visual C++. para poder usarla en cualquier aplicacion en C++ y Visual Basic.

Que archivos necesito agregar al proyecto, y como la invoco en mis fuentes.

Ya busque en internet, pero lo mas que consigo es crear la DLL pero no he podido usarla.

Proyecto para generar DLL:
[MyDll]

////////////////////////////////////////////////////////////////////////////////
MyDll.cpp
/* ***************************************************** */
#include "MyDll.h"

 BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved)
 {
   return TRUE;
 }

 DLL_EXPORT int Suma(int a,int B)
 {
   return (a+B);
 }

/* ***************************************************** */

////////////////////////////////////////////////////////////////////////////////
MyDll.h
/* ***************************************************** */
 #include <windows.h>

 #define DLL_EXPORT __declspec(dllexport)

 #ifdef __cplusplus
  extern "C"
  {
 #endif

 DLL_EXPORT int Suma(int,int);

 #ifdef __cplusplus
    }
 #endif
/* ***************************************************** */


Proyecto WIN-32 Application
Proyecto para utilizar DLL:
[TestMyDll]

////////////////////////////////////////////////////////////////////////////////
stdafx.h
/* ***************************************************** */
 #ifndef _ATM_STD_AFX_H_
 #define _ATM_STD_AFX_H_
 #if _MSC_VER > 1000
 #pragma once
 #endif

 #define WIN32_LEAN_AND_MEAN

 #endif
/* ***************************************************** */

////////////////////////////////////////////////////////////////////////////////
MyDllText.cpp
/* ***************************************************** */

//y hago referencia en la aplicaion donde la voy a usar
 #include <windows.h>
 #include "stdafx.h"
 #include "C:\VISUALC\MY_DLL\MyDll.h"

.....

y me da error solo a la hora  de generar el .exe
 &lt;_&lt;

 --------------------Configuration: MyDllTest - Win32 Debug--------------------
 Linking...
 MyDllTest.OBJ : error LNK2001: unresolved external symbol _Suma
 MyDllTest.exe : fatal error LNK1120: 1 unresolved externals
 Error executing link.exe.

 MyDllTest.exe - 2 error(s), 0 warning(s)

Uso Visual C++6.0
SO Win2000 SP4
Celeron 1.8 Ghz 256RAM

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Crear Dll
« Respuesta #1 en: Miércoles 11 de Mayo de 2005, 20:27 »
0
/*
No se porque se muestran esos emoticones:
Ahi va de nuevo
*/



Alguien podria explicarme como crear una DLL(Win-32 Dinamik-link library) en Visual C++. para poder usarla en cualquier aplicacion en C++ y Visual Basic.

Que archivos necesito agregar al proyecto, y como la invoco en mis fuentes.

Ya busque en internet, pero lo mas que consigo es crear la DLL pero no he podido usarla.

Proyecto para generar DLL:
[MyDll]

////////////////////////////////////////////////////////////////////////////////
MyDll.cpp
/* ***************************************************** */
#include "MyDll.h"

BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved)
{
return TRUE;
}

DLL_EXPORT int Suma(int a,int b)
{
return (a+b);
}

/* ***************************************************** */

////////////////////////////////////////////////////////////////////////////////
MyDll.h
/* ***************************************************** */
#include <windows.h>

#define DLL_EXPORT __declspec(dllexport)

#ifdef __cplusplus
extern "C"
{
#endif

DLL_EXPORT int Suma(int,int);

#ifdef __cplusplus
}
#endif
/* ***************************************************** */


Proyecto WIN-32 Application
Proyecto para utilizar DLL:
[TestMyDll]

////////////////////////////////////////////////////////////////////////////////
stdafx.h
/* ***************************************************** */
#ifndef _ATM_STD_AFX_H_
#define _ATM_STD_AFX_H_
#if _MSC_VER > 1000
#pragma once
#endif

#define WIN32_LEAN_AND_MEAN

#endif
/* ***************************************************** */

////////////////////////////////////////////////////////////////////////////////
MyDllText.cpp
/* ***************************************************** */

//y hago referencia en la aplicaion donde la voy a usar
#include <windows.h>
#include "stdafx.h"
#include "C:\VISUALC\MY_DLL\MyDll.h"

.....

y me da error solo a la hora de generar el .exe
 

--------------------Configuration: MyDllTest - Win32 Debug--------------------
Linking...
MyDllTest.OBJ : error LNK2001: unresolved external symbol _Suma
MyDllTest.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MyDllTest.exe - 2 error(s), 0 warning(s)

Uso Visual C++6.0
SO Win2000 SP4
Celeron 1.8 Ghz 256RAM

kaifaz77

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Crear Dll
« Respuesta #2 en: Viernes 1 de Julio de 2005, 06:06 »
0
Aún necesitas algo de eso?????

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Crear Dll
« Respuesta #3 en: Viernes 1 de Julio de 2005, 07:46 »
0
Si es asi, el problema es que no estas enlazando el codigo de la DLL y por eso te sale la funcion Suma como indefinida. Agrega el archivo MyDll.lib a la linea de comando del 'Vinculador' en las propiedades del proyecto.

Sino tambien podes cargar la libreria dinamicamente con LoadLibrary y conseguir la funcion con GetProcAddress.

 :ph34r:  :comp:  :hola:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

shakka

  • Miembro HIPER activo
  • ****
  • Mensajes: 679
  • Nacionalidad: cr
    • Ver Perfil
    • http://mbrenes.com
Re: Crear Dll
« Respuesta #4 en: Sábado 2 de Julio de 2005, 09:27 »
0
Pues no se si sera correcto hacerlo asi &lt;_&lt; , pero por fin funciono :lol:

1):Proyecto para generar la DLL
/* MyDll.h */
Código: Text
  1.  
  2. #include &#60;windows.h&#62;
  3.  
  4. #define DLL_EXPORT __declspec(dllexport)
  5.  
  6. #ifdef __cplusplus
  7. extern &#34;C&#34;
  8. {
  9. #endif
  10.  
  11. DLL_EXPORT int Suma(int,int);
  12.  
  13. #ifdef __cplusplus
  14. }
  15. #endif
  16.  
  17.  
/*-------------------------------------------------------------------------------*/


/* MyDll.cpp*/
Código: Text
  1.  
  2. #include &#34;MyDll.h&#34;
  3.  
  4. BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved)
  5. {
  6. return TRUE;
  7. }
  8.  
  9. DLL_EXPORT int Suma(int a,int b)
  10. {
  11. return (a+b);
  12. }
  13.  
  14.  

/*-------------------------------------------------------------------------------*/

2):Proyecto para utilizar la DLL
//en este caso una aplicacion win32...
//agrego los archivos: MyDll.h, MyDll.lib, MyDll.dll a este nuevo proyecto.
//y como me dijo Eternal Idol agrege el archivo MyDll.lib a la linea de comando del Linker
/* Test.cpp */
Código: Text
  1.  
  2. #include &#60;windows.h&#62;
  3. #include &#60;stdio.h&#62;
  4.  
  5. #include &#34;MyDll.h&#34;
  6.  
  7. int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
  8. {
  9. int nr;
  10. char szValue[30];
  11.  
  12.   nr=Suma(10,10);//llamada a la funcion definida en MyDll.dll
  13.   sprintf(szValue,&#34;El resultado es = %i&#34;,nr);
  14.   MessageBox(NULL,szValue,&#34;Test de MyDll&#34;,MB_OK);
  15. return 0;
  16. }
  17.  
  18.  
:kicking:

Gracias

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Crear Dll
« Respuesta #5 en: Sábado 2 de Julio de 2005, 17:21 »
0
Me alegro de que te haya servido  :smartass:

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

Jovi

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Crear Dll
« Respuesta #6 en: Miércoles 13 de Julio de 2005, 12:11 »
0
Hola.
He creado una dll con c++ .Net siguiendo las instrucciones de este hilo (después de haberlo intentado de mil formas) y cuando intento agregarla a un proyecto en C# .Net no hay forma, me dice que no es un archivo COM válido, también he probado a incluir los ficheros pero no puedo acceder a ellos.
¿Podéis ayudarme?