2012-07-28 16 views
7

È molto difficile cercare su Google argomenti relativi a C perché continuo a trovare risultati rilevanti per C# o C++ ma non C, quindi forse qualcuno potrebbe darmi una risposta rapida e diretta. Come posso usare le funzioni in una DLL in C senza un file LIB per utilizzarlo? Conosco tutti i prototipi di funzioni e i loro nomi.Utilizzare DLL in C senza lib

Grazie in anticipo!

+0

mi sento te bro! C va sempre più lontano sullo sfondo. – displayname

risposta

8

Sì, è possibile. Si dovrebbe usare la funzione GetProcAddress, per chiamare la funzione direttamente nella DLL, senza coinvolgere il LIB

processi in modo esplicito il collegamento a un GetProcAddress chiamata DLL per ottenere l'indirizzo di una funzione esportata nella DLL. Si utilizza il puntatore alla funzione restituito per chiamare la funzione DLL.

Per citare l'esempio dal link qui sopra:

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

Questo è quello che farò. Ti racconterò della mia esperienza quando questo progetto è finito. Sto cercando di controllare a distanza una vecchia scheda della serie Winradio 3000 in esecuzione su un vecchio computer. Mio padre vuole essere in grado di usarlo ovunque sia e sembra pensare che il controllo remoto sia magicamente facile da fare. Bene, ho la musica in streaming da un computer all'altro adesso, quindi c'è un inizio, ora ho solo bisogno di implementare i controlli con la DLL che viene fornito con winradio e il magico telecomando di mio padre sarà finito. –

+0

Oh e quindi ho bisogno di creare un'interfaccia utente suppongo ... –

+0

Sì, funziona molto bene! Niente di tutto ciò. La documentazione per l'API Winradio era un po 'confusa (DWORD nel loro mondo non è firmato a lungo nel mio mondo apparentemente). A parte questo è stato molto facile. Grazie mille! –

3

È possibile utilizzare LoadLibrary() e GetProcAddress(), come descritto nella risposta da DarkXphenomenon. Oppure, un'altra alternativa consiste nel creare la propria libreria di importazione per la DLL creando un file .def che quindi esegue quello tramite il comando LIB per generare una libreria di importazione. Ulteriori dettagli qui:

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

Problemi correlati