Programación General > Visual C++
Crear Dll
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 <windows.h> #define DLL_EXPORT __declspec(dllexport) #ifdef __cplusplusextern "C"{#endif DLL_EXPORT int Suma(int,int); #ifdef __cplusplus}#endif /*-------------------------------------------------------------------------------*/
/* MyDll.cpp*/
--- Código: Text --- #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);}
/*-------------------------------------------------------------------------------*/
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 <windows.h>#include <stdio.h> #include "MyDll.h" 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,"El resultado es = %i",nr); MessageBox(NULL,szValue,"Test de MyDll",MB_OK); return 0;} :kicking:
Gracias
Navegación
[#] Página Siguiente
Ir a la versión completa