2016-07-11 1 views
0

이 코드를 컴파일하는 것을 시도했다 :오류 LNK1120 : - 1 확인되지 않은 외부 VS13 C는

#include <windows.h> 
#include <commctrl.h> 


#define ID_TABCTRL 1 
#define ID_EDIT 2 
#define BTN_ADD 3 
#define BTN_DEL 4 
#define BTN_CLR 5 
#define MAX_TAB_LEN 15 

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); 
HWND hTab, hEdit; 

int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    PWSTR pCmdLine, int nCmdShow) { 

    MSG msg; 
    WNDCLASSW wc = { 0 }; 
    wc.lpszClassName = L"Tab control"; 
    wc.hInstance = hInstance; 
    wc.hbrBackground = GetSysColorBrush(COLOR_3DFACE); 
    wc.lpfnWndProc = WndProc; 
    wc.hCursor = LoadCursor(0, IDC_ARROW); 

    RegisterClassW(&wc); 
    CreateWindowW(wc.lpszClassName, L"Tab control", 
     WS_OVERLAPPEDWINDOW | WS_VISIBLE, 
     100, 100, 380, 230, 0, 0, hInstance, 0); 

    while (GetMessage(&msg, NULL, 0, 0)) { 

     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
    } 

    return (int)msg.wParam; 
} 

WINCOMMCTRLAPI BOOL WINAPI InitCommonControlsEx(_In_ const INITCOMMONCONTROLSEX *picce); 

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, 
    WPARAM wParam, LPARAM lParam) { 

    TCITEMW tie; 
    wchar_t text[4]; 
    LRESULT count, id; 
    INITCOMMONCONTROLSEX icex; 

    switch (msg) { 

    case WM_CREATE: 

     icex.dwSize = sizeof(INITCOMMONCONTROLSEX); 
     icex.dwICC = ICC_TAB_CLASSES; 
     InitCommonControlsEx(&icex); 

     hTab = CreateWindowW(WC_TABCONTROLW, NULL, WS_CHILD | WS_VISIBLE, 
      0, 0, 200, 150, hwnd, (HMENU)ID_TABCTRL, NULL, NULL); 

     hEdit = CreateWindowW(WC_EDITW, NULL, WS_CHILD | WS_VISIBLE | WS_BORDER, 
      250, 20, 100, 25, hwnd, (HMENU)ID_EDIT, NULL, NULL); 

     SendMessage(hEdit, EM_SETLIMITTEXT, MAX_TAB_LEN, 0); 

     CreateWindowW(WC_BUTTONW, L"Add", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
      250, 50, 100, 25, hwnd, (HMENU)BTN_ADD, NULL, NULL); 

     CreateWindowW(WC_BUTTONW, L"Delete", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
      250, 80, 100, 25, hwnd, (HMENU)BTN_DEL, NULL, NULL); 

     CreateWindowW(WC_BUTTONW, L"Clear", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON, 
      250, 110, 100, 25, hwnd, (HMENU)BTN_CLR, NULL, NULL); 
     break; 

    case WM_COMMAND: 

     switch (LOWORD(wParam)) { 

     case BTN_ADD: 

      GetWindowTextW(hEdit, text, 250); 

      if (lstrlenW(text) != 0) { 

       tie.mask = TCIF_TEXT; 
       tie.pszText = text; 
       count = SendMessageW(hTab, TCM_GETITEMCOUNT, 0, 0); 
       SendMessageW(hTab, TCM_INSERTITEMW, count, 
        (LPARAM)(LPTCITEM)&tie); 
      } 
      break; 

     case BTN_DEL: 

      id = SendMessageW(hTab, TCM_GETCURSEL, 0, 0); 

      if (id != -1) { 

       SendMessageW(hTab, TCM_DELETEITEM, 0, id); 
      } 
      break; 

     case BTN_CLR: 

      SendMessageW(hTab, TCM_DELETEALLITEMS, 0, 0); 
      break; 
     } 
     break; 

    case WM_DESTROY: 

     PostQuitMessage(0); 
     break; 
    } 

    return(DefWindowProcW(hwnd, msg, wParam, lParam)); 
} 

를 그리고이 libary처럼 보인다 :

: 나에게 다음과 같은 오류를 제공

#include <commctrl.h> 

error LNK2019: unresolved external symbol  [email protected] referenced in function [email protected] C:\Users\User\Desktop\Magshimim\Magshimim EX1\Magshimim EX1\01.obj Magshimim EX1 

코드는 여기에서 예제 코드입니다. http://zetcode.com/gui/winapi/advancedcontrols/

그래서 내 컴파일러에 문제가 있다는 것을 알아 냈습니다 ... 하나는 내가 문제를 찾아 내고 수정할 수 있습니까?

편집 : 오류 자체에 대한 매우 일반적인 방식으로 심판의 중복 대화가 이루어지며 초보자로서 그런 질문에서 적절한 답을 작성하는 기술이 없기 때문에 질문이 중복되지 않습니다. 예제를 확인하는 많은 사람들에 의해 사용되었습니다. 특정 질문을하는 것이 무능하다고 생각합니다.

+0

'InitCommonControlsEx' [documentation] (https://msdn.microsoft.com/en-us/library/windows/desktop/bb775697.aspx)에 따라'Comctl32.lib' 라이브러리를 링크 시켰습니까? – dxiv

답변

3

#pragma comment(lib, "comctl32.lib")을 추가하거나 링크 설정을 comctl32.lib에 연결하여 조정하십시오.

함수의 MSDN article 맨 아래에서 테이블을 확인하여 연결할 라이브러리를 찾을 수 있습니다. 모든 Windows 응용 프로그램은 kernel32.dlluser32.dll에 대한 모든 GUI 응용 프로그램에 연결됩니다. 다른 것은 명시 적으로 지정해야합니다 1.


1IInspectable's comment below을 확인, 예외가있다.

+1

* "다른 것은 명시 적으로 지정해야합니다."* - 이것은 올바르지 않습니다. Visual Studio의 마법사 생성 기본 Win32 응용 프로그램은 상당한 수의 LIB (예 : * gdi32.lib *, * comdlg32.lib *, * shell32.lib *)와 연결됩니다. 그리고 헤더 파일 (예 : * SAPI.Lib * ~ sapi.h *)을 통해 암시 적으로 링크 된 라이브러리가 있습니다. 일반적으로 링커 종속성을 명시 적으로 지정하는 것은 위험하지 않지만 반드시 필요한 것은 아닙니다. – IInspectable

+0

@IInspectable 저는 MinGW를 사용하고 Wizard-linked LIBs에 대해 생각하지 않았습니다. 나는 귀하의 의견을 참조하기 위해 답변을 편집했습니다. 감사 :) – a3f