Programación General > Visual C++

 Crear Dll

(1/2) > >>

shakka:
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

shakka:
/*
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:
Aún necesitas algo de eso?????

Eternal Idol:
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:

shakka:
Pues no se si sera correcto hacerlo asi <_< , pero por fin funciono :lol:

1):Proyecto para generar la DLL
/* MyDll.h */

--- Código: Text --- #include &#60;windows.h&#62; #define DLL_EXPORT __declspec(dllexport) #ifdef __cplusplusextern &#34;C&#34;{#endif DLL_EXPORT int Suma(int,int); #ifdef __cplusplus}#endif  /*-------------------------------------------------------------------------------*/


/* MyDll.cpp*/

--- Código: Text --- #include &#34;MyDll.h&#34; BOOL WINAPI DllMain(HINSTANCE hInstance,DWORD fdwReason,PVOID pvReserved){return TRUE;} DLL_EXPORT int Suma(int a,int b){return (a+b);}  
/*-------------------------------------------------------------------------------*/

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 --- #include &#60;windows.h&#62;#include &#60;stdio.h&#62; #include &#34;MyDll.h&#34; int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){int nr;char szValue[30];    nr=Suma(10,10);//llamada a la funcion definida en MyDll.dll  sprintf(szValue,&#34;El resultado es = %i&#34;,nr);  MessageBox(NULL,szValue,&#34;Test de MyDll&#34;,MB_OK); return 0;}   :kicking:

Gracias

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa