c++ - DHCPSAPI DhcpAddServer 链接器错误

标签 c++ visual-studio-2010 linker lnk2001

我正在尝试使用 DHCP Server Management API在 C++ 应用程序中。当我想使用 DhcpAddServer 函数时,我总是遇到链接器错误(LNK2001 未解析的外部符号 _DhcpAddServer)。所有其他功能似乎都可以正常工作。

我已经试过SDK V7.0A和V7.1(目标系统是Win XP)。

这是一个测试代码:

#include <windows.h>
#include <dhcpsapi.h>
#include <tchar.h>

#pragma comment(lib, "dhcpsapi.lib")

DWORD TestDHCPAddServer();
DWORD TestDHCPGetVersion();

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

DWORD TestDHCPAddServer()
{
    DHCP_SERVER_INFO serverInfo;
    DWORD errorCode=0;

    serverInfo.Version = 0;
    serverInfo.ServerName = L"xxxx";
    serverInfo.ServerAddress = 1234;
    serverInfo.Flags = 0;
    serverInfo.State = 0;
    serverInfo.DsLocation = NULL;
    serverInfo.DsLocType = 0;

    errorCode = DhcpAddServer(0, NULL, &serverInfo, NULL, NULL);

  return errorCode;
}

DWORD TestDHCPGetVersion() 
{
    DWORD majorVersion = 0;
    DWORD minorVersion = 0;
    DWORD errorCode = 0;

    errorCode = DhcpGetVersion(NULL, &majorVersion, &minorVersion);

  return errorCode;
}

当删除 TestDHCPAddServer 时,代码会编译,这意味着该库通常可以正常工作。 我还使用了 dumpbin.exe/exports,它说该函数应该在两个版本的库中都可用。

当使用/verbose 运行链接器时,我可以看到它在库中找到了 DhcpGetVersion,但没有找到 DhcpAddServer。

最佳答案

我遇到了同样的问题,并且能够使用编译器选项/Gz 编译代码(默认使用调用约定 _stdcall 而不是 _cdecl)。 在平台SDK给定的dhcpsapi.h头文件中,有些函数(包括DhcpAddServer)没有明确给定调用约定。这意味着,使用默认的编译器选项 (_cdecl)。但是 Win32 Api 的标准是 _stdcall。

关于c++ - DHCPSAPI DhcpAddServer 链接器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26843582/

相关文章:

c++ - 在 C++ 中为 CreateWindow 宏添加负值

c++ - 无法推断出 T[] 的模板参数

asp.net - 设计师坚持使用 'System.Web.UI.WebControls' ,但该值不存在

visual-studio-2010 - 编译 Qt - Visual Studio 2010

c++ - ldconfig 没有看到自定义库

c++ - 链接 src/与 CMake 作为库#include'd 与一些 `libname/` 前缀

c++ - 为什么修改另一个变量引用的字段会导致意外行为?

c++ - 旋转矩阵的方向 vector

visual-studio-2010 - Team Foundation Server 2010 中是否有任何预提交 Hook ?

linux - 包括 <linux/spinlock.h> 链接器