linkado explicito de no-MFC dll´s
¿Como puedo hacerlo? Yo meto este codigo, compila los dos archivos bien pero al ejecutarlo me da error.
// archivo libreria1.cpp (libreria1.dll)
__declspec(dllexport) void __stdcall hola();
void __stdcall hola(){
//cualquier codigo
;}
//fin de libreria1.cpp
//archivo main.cpp
#include <iostream.h>
#include <windows.h>
HINSTANCE hDll = 0;
typedef void (__stdcall *hola_type) ();
hola_type hola=0;
void DLLInit()
{
hDll = LoadLibrary("libreria1.dll");
if (hDll!=NULL){cout << "Linkado correcto..."<<endl;}
else{cout << "Imposible linkado explicito..."<<endl;FreeLibrary(hDll);}
}
void DLLFree()
{
FreeLibrary(hDll);
}
int main()
{
DLLInit();
hola = (hola_type)GetProcAddress(hDll, "hola");
if (!hola){
cout << "puntero a funcion externa correcto..."<<endl;
hola();
}
else{
cout << "no se encuentran funciones externas con ese nombre..."<<endl;}
DLLFree();
return 0;
}
// ----------------------------------------------
Ejecutandolo dice uqe recibe bien el handle a la dll y "reconoce" la funcion de la dll. Soy relativamente nuevo en esto y la verdad, no se que puede fallar.
Uso VC++ 6 y falla con W98 y XP. He buscado bastante por la red y he encontrado muy poca cosa de las dll no-MFC. A mi solo me sirven estas......
Unas preguntas mas a ver si tengo claro el tema:
-una libreria estatica carga todo el codigo en memoria al iniciarse el programa (¿un .h?)
-una dll estatica (linkado implicito) solo carga lo que necesita pero al iniciarse el programa
(se incluye en las opciones de compilado).
-una dll dinamica (linkado explicito) solo carga lo que se le pide y en el momento que se le pide.
¿es todo esto asi? . Muchas gracias por adelantado.
Saludos.
// archivo libreria1.cpp (libreria1.dll)
__declspec(dllexport) void __stdcall hola();
void __stdcall hola(){
//cualquier codigo
;}
//fin de libreria1.cpp
//archivo main.cpp
#include <iostream.h>
#include <windows.h>
HINSTANCE hDll = 0;
typedef void (__stdcall *hola_type) ();
hola_type hola=0;
void DLLInit()
{
hDll = LoadLibrary("libreria1.dll");
if (hDll!=NULL){cout << "Linkado correcto..."<<endl;}
else{cout << "Imposible linkado explicito..."<<endl;FreeLibrary(hDll);}
}
void DLLFree()
{
FreeLibrary(hDll);
}
int main()
{
DLLInit();
hola = (hola_type)GetProcAddress(hDll, "hola");
if (!hola){
cout << "puntero a funcion externa correcto..."<<endl;
hola();
}
else{
cout << "no se encuentran funciones externas con ese nombre..."<<endl;}
DLLFree();
return 0;
}
// ----------------------------------------------
Ejecutandolo dice uqe recibe bien el handle a la dll y "reconoce" la funcion de la dll. Soy relativamente nuevo en esto y la verdad, no se que puede fallar.
Uso VC++ 6 y falla con W98 y XP. He buscado bastante por la red y he encontrado muy poca cosa de las dll no-MFC. A mi solo me sirven estas......
Unas preguntas mas a ver si tengo claro el tema:
-una libreria estatica carga todo el codigo en memoria al iniciarse el programa (¿un .h?)
-una dll estatica (linkado implicito) solo carga lo que necesita pero al iniciarse el programa
(se incluye en las opciones de compilado).
-una dll dinamica (linkado explicito) solo carga lo que se le pide y en el momento que se le pide.
¿es todo esto asi? . Muchas gracias por adelantado.
Saludos.
