2012-07-28 12 views
7

Es muy difícil buscar en Google temas sobre C porque sigo encontrando resultados relevantes para C# o C++ pero no C, así que tal vez alguien podría darme una respuesta rápida y directa. ¿Cómo puedo utilizar las funciones en una DLL en C sin un archivo LIB para ir con él? Conozco todos los prototipos de funciones y sus nombres.Usar DLL en C sin lib

¡Gracias de antemano!

+0

te siento bro! C se aleja en el fondo cada vez más ... – displayname

Respuesta

8

Sí, puedes. Se debe utilizar la función de GetProcAddress, para llamar a la función directamente en la DLL, sin involucrar a la LIB

Procesos de manera explícita la vinculación a una llamada DLL GetProcAddress para obtener la dirección de una función exportada en el archivo DLL. Utiliza el puntero de función devuelto para llamar a la función DLL.

Para citar el Ejemplo desde el enlace anterior:

typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT); 
... 

HINSTANCE hDLL;    // Handle to DLL 
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer 
DWORD dwParam1; 
UINT uParam2, uReturnVal; 

hDLL = LoadLibrary("MyDLL"); 
if (hDLL != NULL) 
{ 
    lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL, 
              "DLLFunc1"); 
    if (!lpfnDllFunc1) 
    { 
     // handle the error 
     FreeLibrary(hDLL); 
     return SOME_ERROR_CODE; 
    } 
    else 
    { 
     // call the function 
     uReturnVal = lpfnDllFunc1(dwParam1, uParam2); 
    } 
} 
+2

Esto es lo que voy a hacer. Te contaré sobre mi experiencia cuando este proyecto termine. Intento controlar a distancia una antigua tarjeta heredada de la serie Winradio 3000 que se ejecuta en una computadora vieja. Mi padre quiere poder usarlo donde sea que esté y parece pensar que el control remoto mágicamente va a ser fácil de hacer. Bueno, ahora mismo tengo transmisión de música de una computadora a otra, así que hay un comienzo, ahora solo necesito implementar los controles con la DLL que viene con winradio y el control remoto mágico de mi padre estará terminado. –

+0

Ah, y luego tengo que hacer una interfaz de usuario, supongo ... –

+0

Sí, ¡esto funciona muy bien! Nada realmente. La documentación para la API de Winradio era un poco confusa (aparentemente, DWORD en su mundo no tiene firma en mi mundo). Aparte de eso, esto fue muy fácil. ¡Muchas gracias! –

3

Puede utilizar LoadLibrary() y GetProcAddress() como se describe en la respuesta por DarkXphenomenon. O bien, otra alternativa es crear su propia biblioteca de importación para el archivo DLL creando un archivo .def y luego ejecutarlo a través del comando LIB para generar una biblioteca de importación. Los detalles adicionales aquí:

http://support.microsoft.com/kb/131313

Cuestiones relacionadas