gpt4 book ai didi

c++ - DHCPSAPI DhcpAddServer 链接器错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:52:00 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com