programing

Win32-API에 사용자 지정 유형이 많은 이유는 무엇입니까?

muds 2023. 7. 20. 22:11
반응형

Win32-API에 사용자 지정 유형이 많은 이유는 무엇입니까?

저는 Win32 API가 처음이라 많은 새로운 유형들이 저를 혼란스럽게 하기 시작했습니다.

일부 기능은 1-2가 소요됩니다.ints그리고 3UINTS의론으로서

  • 왜 그들은 그냥 int를 사용할 수 없습니까?UINS란 무엇입니까?

다음과 같은 다른 유형이 있습니다.

DWORD LPCWSTR LPBOOL 
  • 다시 한 번 말씀드리지만, "기본적인" C 유형으로 충분할 것 같습니다. 왜 100개의 새로운 유형을 도입해야 합니까?

이것은 고통이었습니다.WCHAR*

저는 그것을 반복해서 모든 문자를 std:: string으로 밀어넣어야 했습니다. 왜냐하면 그것을 하나로 변환할 다른 방법이 없었기 때문입니다.끔찍해요.

  • 왜죠WCHAR왜 바퀴를 재창조해야 합니까?그들은 그냥 사용할 수 있었습니다.char*대신에, 아니면?

Windows API는 1980년대에 처음 만들어졌으며 수년간 여러 CPU 아키텍처와 컴파일러를 지원해야 했습니다.단일 사용자 단일 프로세스 독립 실행형 시스템에서 네트워크로 연결된 다중 사용자 멀티 코어 보안에 민감한 시스템으로 전환되었습니다.그들은 16비트 프로세서와 32비트 프로세서, 그리고 이제 64비트 프로세서의 문제를 해결해야 했습니다.이들은 ANSIC 이전 컴파일러 문제를 해결해야 했습니다.그들은 초기의 표준화되지 않은 시기에 C++ 컴파일러를 지원해야 했습니다.그들은 분할된 기억을 다루어야 했습니다.그들은 유니코드가 존재하기 전에 국제화를 지원해야 했습니다.MS-DOS, OS/2 및 Mac OS와의 일부 소스 레벨 호환성을 지원해야 했습니다.여러 세대의 인텔 칩, PowerPC, MIPS, Alpha, ARM에서 실행해야 했습니다.데스크톱, 서버, 모바일 및 임베디드 시스템에 동일한 기본 API가 사용됩니다.

1980년대에, C는 높은 수준의 언어로 여겨졌고 (그렇습니다, 정말로!) 많은 사람들은 단순히 모든 것을 원시적인 것으로 지정하는 것보다 추상적인 유형을 사용하는 것이 좋은 형태라고 생각했습니다.int,char또는void *IntelliSense, infotips, code browser, 온라인 설명서 등이 없었던 시절에는 이러한 사용 힌트가 도움이 되었고 다른 컴파일러와 다른 프로그래밍 언어 간에 코드를 이식하는 것이 더 쉬워졌습니다.

네, 지금은 엉망진창인 것처럼 보이지만, 그렇다고 누군가가 잘못한 것은 아닙니다.

Win32에는 실제로 원시 유형이 거의 없습니다.여러분이 보고 있는 것은 수십 년간 구축된 #defines 및 typedefs와 헝가리어 표기법입니다.왜냐하면 유형이 너무 적고 IntelliSense 개발자들은 특정 유형이 실제로 무엇을 해야 하는지에 대한 " 단서"를 스스로에게 제공했기 때문입니다.

예를 들어, 부울 형식은 없지만 특정 변수가 부울로 처리되어야 함을 알려주는 정수의 "에일리어스" 표현이 있습니다.WinDef.h의 내용을 보고 무슨 말인지 알아보세요.

http://msdn.microsoft.com/en-us/library/aa383751(VS.85).aspx 에서 빙산의 진짜 일각을 볼 수 있습니다.예를 들어 HANDLE이 윈도우즈 개체에 대한 "핸들"인 다른 모든 개체에 대한 기본 유형 정의입니다.물론 HANDLE은 다른 곳에서 원시 유형으로 정의됩니다.

UINT는 부호 없는 정수입니다.매개 변수 값이 음수가 아니거나 음수가 될 수 없는 경우 부호가 없는 것을 지정하는 것이 좋습니다.LPCWSTR은 const wide char array에 대한 포인터이며 WCHAR*은 nonconst입니다.

넓은 문자로 작업할 때는 UNICODE용 앱을 컴파일하거나 변환 루틴을 사용하여 좁은 문자에서 넓은 문자로 변환해야 합니다.
http://msdn..com/en-us/library/dd319072%28VS.85%29.aspxhttp ://msdn.microsoft.com/en-us/library/dd319072%28VS.85%29.aspx

http://msdn.microsoft.com/en-us/library/dd374083%28v=VS.85%29.aspx

제 동료는 "간접적인 차원에서 해결할 수 없는 문제는 없다"고 말할 것입니다.Win32에서는 WCHAR, UINT 등을 다루게 되며, 익숙해질 것입니다.기본 유형의 WCHAR 또는 UINT가 컴파일되는 DLL을 배포할 때 걱정할 필요가 없습니다. "그냥 작동"합니다.

설명서에 익숙해지려면 설명서를 읽어보는 것이 가장 좋습니다.특히 "wide char" 지원(WCHAR 등)에서는 더욱 그렇습니다.WCHAR에 대한 MSDN의 좋은 정의가 있습니다.

언급URL : https://stackoverflow.com/questions/2647982/why-does-the-win32-api-have-so-many-custom-types

반응형