2013-07-21 2 views
0

현재 Windows 응용 프로그램 프로젝트에서 작업 중입니다. Windows API로 개발 중이며 몇 가지 표준을 설정해야합니다.Windows 프로그래밍 및 데이터 형식

중요한 하나

  1. 사용해야합니까 윈도우 데이터 유형 (DWORD, TCHAR, LPSTR ...) 또는 표준 데이터 형식?
  2. 어디서나 코드에서 사용하거나 일부만 사용해야합니까?

감사합니다.

편집 : SAL 주석에 대해 어떻게 생각하십니까? http://msdn.microsoft.com/en-us/library/hh916382.aspx

헤더 파일에 사용해야합니까?

+0

DWORD는 항상 4 바이트이지만 다른 컴파일러와 플랫폼의 경우 'long'은 4 바이트 또는 8 바이트가 될 수 있습니다. DWORD는 IntSafe.h에 선언되어 있으므로 다른 것보다 안전해야합니다. –

답변

2

일부는 단순히 의견이지만, 내 권장 사항은 다음과 같습니다

나는 DWORD 같은 것들에 네 말할 것입니다. Windows 데이터 형식에 대한 특정 기본 형식을 가정해서는 안됩니다. 함수에 DWORD이 필요하다고 가정하면 DWORD을 제공해야한다고 가정해야합니다. Microsoft가 기본 유형을 변경하면 코드가 최소한의 변경만으로 계속 작동해야합니다.

좋은 예가 몇 번이나 변경된 WPARAMLPARAM 유형입니다. 이제는 기본적으로 "포인터를 저장할 수있을 정도로 커"라고 정의되어 있습니다. 즉, 포인터가 32 비트와 64 비트 Windows에서 서로 다른 크기를 가짐을 의미합니다.

내게는 const TCHAR*라고 말하는 것이 더 명확하기 때문에 LPCTSTR과 같은 것에는 no라고 말합니다. 전체 "long pointer"는 16 비트 Windows의 유물입니다. 그러나 내가 const TCHAR*이라고 말하면서 const wchar_t*가 아니라는 것을 주목하십시오.

언제 어디서나 사용하는 데있어 코드의 일부분을 이식 할 필요가 없다고 말하고 싶습니다. 기본 유형이 Windows 데이터 유형 인 사용자 자신의 typedef를 만들 수 있지만

typedef TickCount DWORD;

당신은 "틱 수를"개념이 다른 운영 체제에서 실행하는 데 필요한 수있는 코드를 사용하려는 경우 나는 주로 그 신경 것

만에 그 : 같은 윈도우 용으로 컴파일 어쨌든 코드와 Windows API 사이에 추상화 레이어가 필요하다. 편집 질문에 대한

업데이트 :

나는 SAL 자신에게 어떤 경험이 없지만 먼저 눈에 끔찍한 생각처럼 보이지 않는다. 문서에 의존하지 않고 매개 변수를 사용하는 방법을 명시 적으로 나타내며 MSDN 문서에서 정적 코드 분석 도구와 함께 사용한다고 말합니다. 특수 효과를 올바르게 사용하고 있음을 확인할 수있는 도구가 있다면 나에게 도움이되는 것처럼 보입니다.필자의 즉각적인 반응은 신고를 조금 더 어렵게 만드는 것이지만 일반적으로 API를 정의하는 데있어서 가장 힘든 일 중 하나는 예상되는 동작을 잘 문서화하고 이해하는 것입니다.

+0

아주 좋은 대답입니다! – LppEdd

1

Windows API로 직접 이동하는 값의 경우 windows 유형을 사용하십시오. 자신의 내부 계산에만 사용되는 값의 경우 사용자 고유의 유형 (또는 stdint.h와 같은 것)을 사용하십시오. 둘 다에 사용되는 값의 경우, 자신의 유형을 사용하고 필요할 때마다 창 유형으로 변환하십시오. 이 질문의