2014-11-10 2 views
2

Я пытаюсь использовать DHCP Server Management API в приложении C++. Когда я хочу использовать функцию DhcpAddServer, я всегда получаю ошибку компоновщика (LNK2001 неразрешенный внешний символ _DhcpAddServer). Все остальные функции работают нормально.Ошибка компоновщика DHCPSAPI 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, и он говорит, что функция должна быть доступна в обеих версиях lib.

При запуске компоновщика с/verbose я вижу, что он находит DhcpGetVersion в lib, но не DhcpAddServer.

ответ

0

У меня была такая же проблема и я смог скомпилировать код, используя параметр компилятора/Gz (используя вызов _stdcall по умолчанию вместо _cdecl). В данном файле заголовка dhcpsapi.h платформы SDK для некоторых функций (включая DhcpAddServer) явно не указано соглашение о вызове. Это означает, что используется опция компилятора по умолчанию (_cdecl). Но стандартом для Win32 Api является _stdcall.

 Смежные вопросы

  • Нет связанных вопросов^_^