2012-07-29 1 views
0

J'ai un fichier d'en-tête nommé NetworkInterfaceInfoProvider.h. dans ce fichier d'en-tête i Déclarez une classe comme suit:Symbole externe non résolu lors de l'utilisation d'une bibliothèque

#ifndef INETWORK_INTERFACE_INFO_PROVIDER_H 
#define INETWORK_INTERFACE_INFO_PROVIDER_H 
#pragma once 
/*#include "stdafx.h"*/ 
#include "IConfig.h" 
#include "NetworkAddapterAddresses.h" 
#include "InstaledAddapters.h" 

namespace IRNetwork 
{ 
    class CLASS_DECLSPEC INet; 
    struct CLASS_DECLSPEC GenericIPAddress; 
    /* 
    * provide information about all network interface related adapters such as installed interfaces , addresses , best routes and ... 
    * TO DO: implement Other OS's 
    */ 
    class CLASS_DECLSPEC INetworkInterfaceInfoProvider 
    { 
    public: 
     INetworkInterfaceInfoProvider(void); 
     ~INetworkInterfaceInfoProvider(void); 

     int32_t GetBestRouteTo(char* destIp,uint16_t port,ip_t *ip); 
     int32_t GetBestRouteTo(GenericIPAddress* ip); 
    private: 
     INet* snet; 
    }; 
} 
#endif 

quand je veux l'utiliser dans mon application console je suis l'erreur suivante linker

* Note: la bibliothèque de code ci-dessus a été lié à mon application de console. CLASS_DECLSPEC est la définition d'import/export dll *

erreur LNK2019: symbole externe non résolu « __declspec (dllimport) public: int __thiscall IRNetwork :: INetworkInterfaceInfoProvider :: GetBestRouteTo (char , court non signé, char () [65]) »(_ diablotin? GetBestRouteTo @ INetworkInterfaceInfoProvider @ IRNetwork @@ QAEHPADGPAY0EB @ D @ Z) référencé dans la fonction "void __cdecl test_adapters (void)" (? @@ test_adapters YAXXZ) testDhcpv4.obj testDhcpv4

qu'est-ce qui ne va pas ici?

Répondre

1

Hmm. De l'erreur, je dirais que l'importation semble bien. Alors peut-être qu'il y avait une erreur lors de l'exportation. En supposant que vous utilisez Visual Studio, vous pouvez utiliser dumpbin pour vérifier si votre dll exporte correctement:

Ouvrez l'invite de commande Visual Studio (disponible à partir des fenêtres menu démarrer) et tapez

dumpbin /EXPORTS yourlib.dll 

Ensuite, vous devriez voir nos exportations, quelque chose comme (décharge d'un de mes dll):

... 
170 A9 00108120 [email protected]@[email protected]@@[email protected] = [email protected]@[email protected]@@[email protected] (public: virtual __thiscall megamol::core::param::BoolParam::~BoolParam(void)) 
... 

Si la fonction de votre correspondant est pas répertorié, vous devez bien vérifier si votre dllexport est réglé correctement tout en construisant votre dll.

Si la fonction est répertoriée, mais semble différente, vous devez vérifier que les conventions d'appel sont les mêmes pour votre application et votre DLL.

Si la fonction est répertoriée et que le nom semble identique à celui indiqué dans le message d'erreur, doubleecheck si vous liez correctement la bibliothèque d'importation de la DLL.

Vérifiez également si la configuration à l'exécution est la même pour votre application et votre DLL (par exemple, Multi-Threaded-Dll ou Multi-Threaded-Debug-Dll).

+0

ce que dit fichier de vidage 197 C4 0000B120 GetBestRouteTo @ INetworkInterfaceInfoProvider @ IRNetwork @@ QAEHPADGW4SocketTypeEnum @ 2 @ PAY0EB @ D @ Z = GetBestRouteTo @ INetworkInterfaceInfoProvider @ IRNetwork @@ QAEHPADGW4SocketTypeEnum @ 2 @ PAY0EB @ D @ Z (public?: int __thiscall IRNetwork :: INNetworkInterfaceInfoProvider :: GetBestRouteTo (char *, short non signé, enum IRNetwork :: SocketTypeEnum, char (*) [65])) sa vraie base sur ma syntaxe pour la déclaration de fonction –

+0

comment je peux vérifier pour le voir est lié correctement ou non? J'ajoute la bibliothèque de ma DLL à l'entrée de la console de l'application de la console. est-ce suffisant? –

+0

après avoir changé le type de configuration à la bibliothèque de liens dynamiques (DLL) tout fonctionne correctement –