DHCPSAPI DhcpAddServer链接器错误

DHCPSAPI DhcpAddServer linker error

本文关键字:错误 链接 DhcpAddServer DHCPSAPI      更新时间:2023-10-16

我正在尝试在c++应用程序中使用DHCP服务器管理API。当我想使用DhcpAddServer函数时,我总是会收到一个链接器错误(LNK2001未解析的外部符号_DhcpAddServer)。所有其他功能似乎都能正常工作。

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

这是一个测试代码:

#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时,代码会编译,这意味着lib通常可以工作。我还使用了dumpbin.exe/exports,它说该函数应该在两个版本的lib中都可用。

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

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

相关文章: