[API] Error C2664, E0167 - DLGPROC형식의 변환

2020. 3. 24. 17:27· Study/API
// DialogBox 프록시저
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	switch (iMessage)
	{
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case ID_NEW_GAME:
			g_GameManager.ResetGame();

			break;

		case ID_OPTION:
			// DialogBox 생성(인스턴, 리소스(템플리트), Dialog가 뿌려질 윈도우, DialogBox 프록시저)
			DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, AboutDlgProc);

			break;
			
		case ID_EXIT:
			PostQuitMessage(0);
			break;
		}

		return 0;

		// 윈도우가 파괴되었다는 메시지다.
	case WM_DESTROY:
		// GetMessage함수에 WM_QUIT 메시지를 보낸다.
		PostQuitMessage(0);

		return 0;
	}

	// case에 있는 메시지를 제외한 나머지 메시지를 처리한다.
	return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

<WinMain.cpp>

1. 오류

 DialogBox를 생성할 때 4번째 인자인 DialogBox 프록시저에서 아래의 2가지 오류가 발생한다.

<발생한 오류>

2. 해결 방법

DLGPROC Dlgproc;

INT_PTR Dlgproc(
  HWND Arg1,
  UINT Arg2,
  WPARAM Arg3,
  LPARAM Arg4
)

<Dlgproc의 정의>

 

int DialogBox( HINSTANCE hInstance, LPCTSTR lpTemplate, HWND hWndParent, DLGPROC lpDialogFunc );

<DialogBox의 정의>

 

 Dlgproc의 정의를 보면 INT_PTR을 리턴 값으로 가지고 있다. 오류가 생긴 코드에서 DialogBox 프록시저는 BOOL형을 리턴 값으로 가지고 있다. 따라서 선언한 프록시저를 INT_PTR형을 리턴 값으로 갖도록 수정하거나 함수 이름에 주소연산자를 붙여 포인터로 만들어 강제 형변환을 해주어야 한다.

 

// DialogBox 프록시저
BOOL CALLBACK AboutDlgProc(HWND hDlg, UINT iMessage, WPARAM wParam, LPARAM lParam);

LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
	switch (iMessage)
	{
	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case ID_NEW_GAME:
			g_GameManager.ResetGame();

			break;

		case ID_OPTION:
			// DialogBox 생성(인스턴, 리소스(템플리트), Dialog가 뿌려질 윈도우, DialogBox 프록시저)
			DialogBox(g_hInst, MAKEINTRESOURCE(IDD_DIALOG1), hWnd, (DLGPROC)&AboutDlgProc);

			break;
			
		case ID_EXIT:
			PostQuitMessage(0);
			break;
		}

		return 0;

		// 윈도우가 파괴되었다는 메시지다.
	case WM_DESTROY:
		// GetMessage함수에 WM_QUIT 메시지를 보낸다.
		PostQuitMessage(0);

		return 0;
	}

	// case에 있는 메시지를 제외한 나머지 메시지를 처리한다.
	return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}

<수정한 WinMain.cpp>


참고1 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=703385&ref=703385

참고2 : https://docs.microsoft.com/en-us/windows/win32/api/winuser/nc-winuser-dlgproc

참고3 : http://www.soen.kr/lecture/win32api/reference/Function/DialogBox.htm

'Study > API' 카테고리의 다른 글

[API] Error LNK2019, LNK1120 - main 외부 기호에서 확인하지 못했습니다, 1개의 확인할 수 없는 외부 참조입니다.  (0) 2020.03.26
[API] 충돌체크 PtInRect 함수와 IntersectRect 함수  (0) 2020.03.18
[API] 리소스 뷰 오류 - 다른 편집기에서 열려 있습니다.  (0) 2020.03.12
'Study/API' 카테고리의 다른 글
  • [API] Error LNK2019, LNK1120 - main 외부 기호에서 확인하지 못했습니다, 1개의 확인할 수 없는 외부 참조입니다.
  • [API] 충돌체크 PtInRect 함수와 IntersectRect 함수
  • [API] 리소스 뷰 오류 - 다른 편집기에서 열려 있습니다.
한돌이
한돌이
GameProgramer 취업준비 중 onestone3647@gmail.com
한돌이
Lykan Studio
한돌이
전체
오늘
어제
  • 분류 전체보기 (102)
    • Daily Life (0)
    • Project (15)
      • Replica (10)
      • CE (1)
      • T (4)
    • Unreal Engine (74)
      • C++ (40)
      • Blueprint (5)
      • AI (5)
      • Effect (3)
      • UMG (2)
      • Error (2)
      • etc. (16)
    • Study (8)
      • C++ (2)
      • Algorithm (0)
      • API (4)
      • Git (2)
    • etc. (4)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • daily life
  • Project Replica
  • Unreal Engine
  • Unreal Engine 4
  • ProjectT
  • Unreal Engine 4 C++
  • .etc
  • Unreal Engine 5
  • Study
  • c++
  • ADB
  • Project T
  • error
  • etc.
  • ETC
  • Unreal Engine etc.
  • ProjectReplica
  • 자소서
  • Unreal Engine 4 Error
  • GIT
  • 오류
  • Unreal Engine4
  • threadsafe
  • Unreal Engine4 Effect
  • API
  • project
  • UnrealEngine4

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
한돌이
[API] Error C2664, E0167 - DLGPROC형식의 변환
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.