2012-07-28 3 views
7

Il est très difficile de rechercher des sujets sur C parce que je trouve toujours des résultats pertinents pour C# ou C++ mais pas C, alors peut-être quelqu'un pourrait me donner une réponse rapide et simple. Comment puis-je utiliser les fonctions dans une DLL en C sans un fichier LIB pour aller avec? Je connais tous les prototypes de fonctions et leurs noms.Utiliser DLL en C sans lib

Merci d'avance!

+0

Je sens que vous bro! C dérive de plus en plus en arrière-plan. – displayname

Répondre

8

Oui, vous pouvez. Vous devez utiliser la fonction GetProcAddress, pour appeler la fonction directement dans la DLL, sans impliquer le LIB

processus liant explicitement à un GetProcAddress d'appel de DLL pour obtenir l'adresse d'une fonction exportée dans la DLL. Vous utilisez le pointeur de fonction renvoyé pour appeler la fonction DLL.

Pour citer l'exemple à partir du lien ci-dessus:

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

C'est ce que je vais faire. Je vais vous parler de mon expérience lorsque ce projet sera terminé. J'essaie de contrôler à distance une ancienne carte Winradio série 3000 en cours d'exécution dans un vieil ordinateur. Mon père veut être capable de l'utiliser partout où il est et semble penser que le contrôle à distance va être facile à faire par magie. Eh bien, j'ai la musique en streaming d'un ordinateur à l'autre en ce moment, donc il y a un début, maintenant j'ai seulement besoin d'implémenter les contrôles avec la DLL qui vient avec winradio et la télécommande magique de mon père sera terminée. –

+0

Oh et puis je dois faire une interface utilisateur je suppose ... –

+0

Oui, cela fonctionne très bien! Rien à vraiment. La documentation de l'API Winradio était un peu déroutante (DWORD dans leur monde n'est pas signé longtemps dans mon monde apparemment). A part ça, c'était très facile. Merci beaucoup! –

3

Vous pouvez utiliser LoadLibrary() et GetProcAddress() tel que décrit dans la réponse par DarkXphenomenon. Vous pouvez également créer votre propre bibliothèque d'importation pour la DLL en créant un fichier .def, puis en exécutant la commande LIB pour générer une bibliothèque d'importation. Des détails supplémentaires ici:

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

Questions connexes