1. cl opener.cpp 컴파일 : 오류 발생, 내용
opener.obj : error LNK2019: __imp__GetMessageA@16 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__TranslateMessage@4 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__DispatchMessageA@4 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__DefWindowProcA@16 외부 기호(참조 위치: "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__PostQuitMessage@4 외부 기호(참조 위치: "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__RegisterClassExA@4 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__CreateWindowExA@48 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__ShowWindow@8 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__UpdateWindow@4 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__MessageBoxA@16 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__LoadCursorA@8 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__LoadIconA@8 외부 기호(참조 위치: _WinMain@16 함수)에서 확인하지 못했습니다.
opener.obj : error LNK2019: __imp__ShellExecuteA@24 외부 기호(참조 위치: "long __stdcall ButtonClickProc(struct HWND__ *,unsigned int,unsigned int,long)" (?ButtonClickProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
opener.exe : fatal error LNK1120: 13개의 확인할 수 없는 외부 참조입니다.
2. cl opener.cpp user32.lib 컴파일 : 오류 발생, 내용
opener.obj : error LNK2019: __imp__ShellExecuteA@24 외부 기호(참조 위치: "long __stdcall ButtonClickProc(struct HWND__ *,unsigned int,unsigned int,long)" (?ButtonClickProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
opener.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
3. cl opener.cpp user32.lib shell32.lib 컴파일 : 오류 발생, 내용 (동일)
opener.obj : error LNK2019: __imp__ShellExecuteA@24 외부 기호(참조 위치: "long __stdcall ButtonClickProc(struct HWND__ *,unsigned int,unsigned int,long)" (?ButtonClickProc@@YGJPAUHWND__@@IIJ@Z) 함수)에서 확인하지 못했습니다.
opener.exe : fatal error LNK1120: 1개의 확인할 수 없는 외부 참조입니다.
해결 방법
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib의 Shell32.lib파일을
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib에 복사 (기존에 있던 Shell32.lib는 Shell32_Original.lib로 변경)
cl opener.cpp user32.lib shell32.lib : 컴파일 정상
cl opener.cpp user32.lib : 컴파일 정상
Opener.cpp
ChatGPT에게 C++로 프로그램을 만들거야. 크기는 1024*720이고 클릭할 수 있는 버튼은 6개가 있어. 각 버튼 중 3개는 메모장 열기, 그림판 열기, 크롬 열기 기능을 수행하고 나머지 3개는 비워둘게. 코드를 작성해 줘.
#include <windows.h>
#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#pragma comment(lib,"Shell32")
// 버튼 식별자
#define BUTTON_MEMO 1001
#define BUTTON_PAINT 1002
#define BUTTON_CHROME 1003
#define BUTTON_EMPTY1 1004
#define BUTTON_EMPTY2 1005
#define BUTTON_EMPTY3 1006
// 버튼 클릭 이벤트 핸들러
LRESULT CALLBACK ButtonClickProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (LOWORD(wParam))
{
case BUTTON_MEMO:
// 메모장 열기 기능 수행
ShellExecute(NULL, "open", "notepad.exe", NULL, NULL, SW_SHOWNORMAL);
break;
case BUTTON_PAINT:
// 그림판 열기 기능 수행
ShellExecute(NULL, "open", "mspaint.exe", NULL, NULL, SW_SHOWNORMAL);
break;
case BUTTON_CHROME:
// 크롬 열기 기능 수행
ShellExecute(NULL, "open", "chrome.exe", NULL, NULL, SW_SHOWNORMAL);
break;
// 나머지 버튼은 비워둠
}
return 0;
}
// 윈도우 프로시저
LRESULT CALLBACK WindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
return ButtonClickProc(hwnd, message, wParam, lParam);
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
// 윈도우 클래스 등록
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WindowProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = "MyWindowClass";
wcex.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
if (!RegisterClassEx(&wcex))
{
//MessageBox(NULL, "Window registration failed!", "Error", MB_ICONERROR | MB_OK);
return 0;
}
// 윈도우 생성
HWND hwnd = CreateWindow("MyWindowClass", "My Window", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 1024, 720, NULL, NULL, hInstance, NULL);
if (hwnd == NULL)
{
//MessageBox(NULL, "Window creation failed!", "Error", MB_ICONERROR | MB_OK);
return 0;
}
// 버튼 생성
CreateWindow("BUTTON", "메모장 열기", WS_VISIBLE | WS_CHILD, 10, 10, 150, 30, hwnd, (HMENU)BUTTON_MEMO, hInstance, NULL);
CreateWindow("BUTTON", "그림판 열기", WS_VISIBLE | WS_CHILD, 10, 50, 150, 30, hwnd, (HMENU)BUTTON_PAINT, hInstance, NULL);
CreateWindow("BUTTON", "크롬 열기", WS_VISIBLE | WS_CHILD, 10, 90, 150, 30, hwnd, (HMENU)BUTTON_CHROME, hInstance, NULL);
CreateWindow("BUTTON", "", WS_VISIBLE | WS_CHILD, 10, 130, 150, 30, hwnd, (HMENU)BUTTON_EMPTY1, hInstance, NULL);
CreateWindow("BUTTON", "", WS_VISIBLE | WS_CHILD, 10, 170, 150, 30, hwnd, (HMENU)BUTTON_EMPTY2, hInstance, NULL);
CreateWindow("BUTTON", "", WS_VISIBLE | WS_CHILD, 10, 210, 150, 30, hwnd, (HMENU)BUTTON_EMPTY3, hInstance, NULL);
// 윈도우 화면에 표시
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
// 메시지 루프
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int)msg.wParam;
}
'코드 > C++' 카테고리의 다른 글
서브시스템 (0) | 2023.07.09 |
---|---|
128TB를 16진수로 변환 (0) | 2023.07.07 |
버튼 클릭 시 메세지 출력 (0) | 2023.05.16 |
Chapter04_Game programming in c++ (0) | 2022.09.17 |
Chapter03_Game programming in c++ (0) | 2022.09.09 |
댓글