본문 바로가기

옛날옛적+맛보기 공부/c언어

visual studio 에서의 설정문제

현제 활용중인 교재 http://www.soen.kr/ 사이트의 api 강좌 순서대로 진행중

 

visual studio2017 사용중 프로젝트 생성시 설정 windows 응용프로그램 + 빈프로젝트 

 

교재 시작시 기본 winmain 코드에서의 오류화면 

 

첫 번째 오류 "const char *" 형식의 값을 사용하여 "LPSTR" 형식의 엔티티를 초기화할 수 없습니다.

 

해결하는데 참고한 사이트 주소

https://espada4897.wordpress.com/2014/12/23/lpstr%EA%B3%BC-lpctstr%EC%97%90-%EA%B4%80%ED%95%B4%EC%84%9C/comment-page-1/#comment-33

 

결론 

LP long pointer = 포인터를 나타낸다 

STR = string = 문자형

C = 

constant (상수화= 변형되지 않는)

W = 

wide char = 유니코드

 

위 내용을 참고하여 차근차근 보도록 하면

 

첫 번째 오류 "const char *" 형식의 값을 사용하여 "LPSTR" 형식의 엔티티를 초기화할 수 없습니다

우선 선언시 LPSTR = const형식이 아니므로 해당 내용을 맞춰준다. 

LPSTR -> LPCSTR

 

컴파일시 다음 에러 화면 

 

두 번째 오류 

"LPCSTR" 형식의 값을 "LPCWSTR" 형식의 엔터티에 할당할 수 없습니다.

위의 내용을 참고해보면 "LPCWSTR"는 유니코드 형태가 되고 "LPCSTR" 첫 번째 오류에서알 수 있듯이 해당자료형은 const char * 형이다 즉 W가 없음으로 멀티바이트문자(아스키코드) 라는것이다. 즉 " 문자열 "는 멀티바이트 문자형태로 저장된다는것이다. 

그리고 두 번째 오류내용에서 또 알수 있는점은 소스에서 "LPCSTR"값을  "LPCWSTR" 형태로 할당하려하는점이다. 

그렇다면 왜 오류가 나는것일가 그점은 프로젝트 속성을 들어가보면 알 수 있다. 

보면 알겠지만 유니코드 문자를 사용한다고 설정되어 있다 그러나 위 소스에서의 "문자"는 멀티바이트로 사용되야한다. 그러나 유니코드 문자형태로 사용하는 설정때문에 오류가 나게 된것이다. 해당 설정을 멀티바이트 문자 집합을 사용으로 바꿔주면 해결이 가능하다. 

 

컴파일시 다음 에러화면

 

세 번째 오류

 

 

_main 외부 기호(참조 위치: "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ) 함수)에서 확인하지 못했습니다.

 
해당내용은 구글링을 통해서 확인하였다. 결론부터말하면 이전에 실습하던내용때문에 설정했던것이 원인이었다.

 

해당 설정에서 하위 시스템을 콘솔이 아닌 

 
창 설정으로 설정시 정상 작동이 된다.
 
 
 
 
 
 
 
 
 
으.... 이렇게 1시간이 넘는 시간에 걸처서 한게 겨우 기본 윈도우 화면(기본설정 포함)을 띄우는데 시간을 허비했다. 
가장큰 원인은 그동안 dev 통합 툴에 너무 의존했던것이 원인인것같다. 가장 크게 느낀점은 개발하는데 있어서 사소한거 하나하나 굉장히 엄격하게 검사를 해준다는 점이다. 해당 내용또한 아직 미숙하여 추상적으로 이해하고 넘어가지만 게임개발자가 목표인 나에게 있어서 아주 중요한내용인것같다. 추후 컴퓨터구조부터 차근차근 배워나가자