2014-11-10 9 views
2

DHCP Server Management API을 C++ 응용 프로그램에서 사용하려고합니다. DhcpAddServer 함수를 사용하려고 할 때 항상 링커 오류 (LNK2001 미확인 외부 기호 _DhcpAddServer)가 발생합니다. 다른 모든 기능은 정상적으로 작동하는 것 같습니다.DHCPSAPI DhcpAddServer 링커 오류

이미 SDK V7.0A 및 V7.1을 사용해 보았습니다 (대상 시스템은 Win XP 임). 여기

테스트 코드 다음 TestDHCPAddServer가 제거되면

#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; 
} 

, 코드 컴파일, 의미, 일반적으로 LIB 작동하는지. 또한 dumpbin.exe/exports를 사용했으며이 함수는 두 버전의 lib에서 모두 사용할 수 있어야한다고 말합니다.

/verbose를 사용하여 링커를 실행하면 lib에서 DhcpGetVersion을 찾을 수 있지만 DhcpAddServer는 찾을 수 없습니다.

답변

0

동일한 문제가있어서 컴파일러 옵션/Gz (_cdecl 대신 기본값으로 호출 규칙 _stdcall 사용)를 사용하여 코드를 컴파일 할 수있었습니다. 플랫폼 SDK의 dhcpsapi.h 헤더 파일에서 DhcpAddServer를 비롯한 일부 기능의 경우 명시 적으로 제공되는 호출 규칙이 없습니다. 즉, 기본 컴파일러 옵션 (_cdecl)이 사용됩니다. 그러나 Win32 API의 표준은 _stdcall입니다.