2017-03-28 2 views

답변

2

이전 창 (사전 NT) (문자 당 1 바이트, 세계의 모든 지역에서 다른). NT 이후부터 유니 코드가 소개되었습니다. Pre-NT 모든 API가 ANSI 인 경우 (예 : LoadLibraryA(LPCSTR)은 라이브러리 이름에 ANSI 이름을 사용함) NT 이후부터는 모든 API의 새 버전을 유니 코드 (LoadLibraryW(LPCWSTR))를 사용하여 도입 했으므로 Windows> = NT에서 로드 라이브러리, ANSI 및 유니 코드 API입니다.

을 그 다음 세 번째 버전, LoadLibrary가 단지 #define이다,있다.이 #DEFINE의 값 (즉 LoadLibraryA 또는 LoadLibraryW 될 수 있으며, #define UNICODE 경우에 따라 달라집니다 설정되어 있는지 여부) (ShellExecuteA 또는 ShellExecuteW 일 수있는 ShellExecute과 동일). 따라서 소스 코드에서 직접 LoadLibraryA, LoadLibraryW을 사용할 수 있습니다. d 세 번째 버전 인 LoadLibrary은 전처리 기 매크로에 따라 다른 두 가지 중 하나를 사용합니다. 당신은 API의 "불가지론 자"LoadLibrary 버전을 사용하려는 경우에는 전처리를 통해 변경 될 것이다, TCHAR, LPTSTR, LPCTSTR, _T("foo")를 사용한다 char, char*, const char*, "foo" 또는 wchar_t에, wchar_t*, const wchar_t*, L"foo" .

그러나 2017 년 (일반적으로 Windows ME가 죽은 때로부터) ANSI API를 사용하는 경우 이 잘못 되었음을 유의하십시오 (). UNICODE를 대상으로해야합니다 (또는 대상이 아닌 버전과 #define UNICODE을 대상으로해야합니다).

+0

ANSI API를 사용하는 주된 이유는 ANSI가 실제 코드 페이지가 아니기 때문입니다. 그러나 지역화 된 버전에서는 8 비트 인코딩이 사용됩니다. Windows. 따라서 그리스어 윈도우 (그리스어 문자)를 사용하여 멋진 ANSI 프로그램을 작성하면 그리스어가 아닌 버전의 Windows에서 모든 그리스어 텍스트를 자동으로 왜곡합니다. – rodrigo

+0

@rodrigo ANSI 방법을 사용하면 전체 파일 시스템을 올바른 방법으로 볼 수 없다는 사실을 훨씬 더 중요하게 생각합니다. – xanatos

관련 문제