2008. 9. 22. 10:34

error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [9]' to 'LPCWSTR'


VS2005를 사용하면서 'error C2664: 'CreateFileW' : cannot convert parameter 1 from 'const char [9]' to 'LPCWSTR''라는 에러 메시지를 종종 보게 된다.

CreateFile()라는 함수를 사용할 때 첫번째 인자의 형식이 잘못된듯한데.. 지금 사용하고 있는 CreateFile()라는 녀석을 보면 CreateFile("aaa.txt",GENERIC_READ,0,NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)로 문자열을 처리하는 부분이다.
"aaa.txt"라는 문자열을 사용하고 있었는데.. 이를 TEXT("aaa.txt")라든지 L"aaa.txt"로 바꾸어주면 에러가 발생하지 않는다.

하지만.. 다른 문제가 발생해 버렸다. 메지시 박스로 테스트 문자열을 출력하는데 다음과 같이 문자열이 깨져나오는 현상이 발생을 한 것이다.

이 부분을 해결하기 위해서는 문자 집합(Character Set)의 설정을 바꾸어 주어야 하는 모양이다.
VS2005의 메뉴에서 Project->Properties...(Alt+F7)을 선택하여 해당 프로젝트의 프로퍼티 창을 연다. 왼쪽의 항목을 보여주는 창에서 Configuration Properties의 General에서 Character Set 항목을 살펴본다. 기본적으로 VS2005에서는 Character Set이 'Use Unicode Character Set'으로 되어 있는 듯 하다. 이녀석의 세팅을 'Use Multi-Byte Character Set'으로 수정을 한다.

다시 컴파일을 한 뒤 실행을 시키면 원하는 결과를 얻을 수 있을 것이다.

한결 보기 좋아졌다... 아니 많이 보기 좋아졌네..

간단한 것인데.. 툴에 대해 모르는 것이 너무 많아 고생을 많이 하는 부분중에 하나인 듯 하다.