La respuesta anterior, a decir verdad, no es correcta del todo ya que la necesidad del *.lib de tu biblioteca sólo es para el caso de un enlazado implicito, si por el contrario no tienes el *.lib lo que tendrás que hacer es un enlazado explícito..., está bien, está bien me explico:
Con el enlazado explicito te verás obligado a llamar ala función LoadLibrary de Win32, especificando el camino de acceso a la DLL como parámetro.LoadLibrary devuelve un parametro HINSTANCE que puede utilizarse en un llamad a GetProcAddress, que convierte un símbolo u ordinal en una dirección dentro de la DLL.
Supongamos que tenemos una DLL que exporta una función de la siguiente manera:
extern "C" __declspec(dllexport) double RaizCuadrada(double d)
Aquí te muestro cómo se haría el enlazado explícito de de esta función en un programa cliente:
// definimos un puntero a función
typedef double(RAIZCUADRADAPROC)(double);
HINSTANCE hInstance;
RAIZCUADRADAPROC *pFuncion;
VERYFY(hInstance = :: LoadLybrary("ruta_de_la_DLL"));
VERYFY(pFuncion = (RAIZCUADRADAPROC *)::GetProcAddress(hInstance,"RaizCuadrada"));
// llamamos a la función de la DLL
double d = (*pFuncion)(32.0)
Espero que esto sí que te haya servido de ayuda