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.obj testDhcpv4 中引用

这里有什么问题?

4

1 回答 1

1

唔。从错误中我会说导入看起来不错。所以可能在导出时出错。假设您使用的是 Visual Studio,您可以使用 dumpbin 检查您的 dll 是否正确导出:

打开 Visual Studio 命令提示符(可从 Windows 开始菜单获得)并键入

dumpbin /EXPORTS yourlib.dll

然后你应该看到我们的导出,比如(从我的一个 dll 中转储):

...
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 回答