linkado explicito de no-MFC dll´s

nuevo
30 de Noviembre del 2004
¿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.