我正在尝试使用 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/