0

NetworkInterfaceInfoProvider.hという名前のヘッダーファイルがあります。このヘッダーファイルで、クラスを次のように宣言します。

#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

コンソールアプリケーションで使用したい場合、次のリンカーエラーが発生しました

*注:上記のコードのライブラリは、私のコンソールアプリケーションにリンクされています。CLASS_DECLSPECはdllのインポート/エクスポート定義です*

エラーLNK2019:未解決の外部シンボル "__declspec(dllimport)public:int __thiscall IRNetwork :: INetworkInterfaceInfoProvider :: GetBestRouteTo(char 、unsigned short、char()[65])"(_ imp?GetBestRouteTo @ INetworkInterfaceInfoProvider @ IRNetwork @@ QAEHPADGPAY0EB @ D @Z)関数 "void __cdecl test_adapters(void)"(?test_adapters @@ YAXXZ)testDhcpv4.objtestDhcpv4で参照

ここで何が問題になっていますか?

4

1 に答える 1

1

うーん。エラーから、インポートは良さそうだと思います。したがって、エクスポート中にエラーが発生した可能性があります。Visual Studioを使用していると仮定すると、dumpbinを使用して、dllが正しくエクスポートされているかどうかを確認できます。

Visual Studioコマンドプロンプト(Windowsのスタートメニューから利用可能)を開き、次のように入力します

dumpbin /EXPORTS yourlib.dll

次に、(私のdllの1つからのダンプ)のようなエクスポートが表示されます。

...
170   A9 00108120 ??1AbstractParam@param@core@megamol@@UAE@XZ = ??1BoolParam@param@core@megamol@@UAE@XZ (public: virtual __thiscall megamol::core::param::BoolParam::~BoolParam(void))
...

呼び出している関数がリストされていない場合は、dllのビルド中にdllexportが正しく設定されているかどうかを再確認する必要があります。

関数がリストされているが、外観が異なる場合は、呼び出し規約がアプリケーションとdllで同じであるかどうかを確認する必要があります。

関数がリストされていて、名前がエラーメッセージの内容と同じである場合は、dllのインポートライブラリを正しくリンクしているかどうかを再確認してください。

また、ランタイム構成がアプリケーションとdllで同じであるかどうかを確認します(例:Multi-Threaded-DllまたはMulti-Threaded-Debug-Dll)。

于 2012-07-29T13:53:42.693 に答える