2010-03-04 7 views
15

Windows의 Platform SDK 헤더 파일을 통해 탐색 중이 었으며 (많은 삶이 맞습니까?) 전처리 기 기호 _MAC에 대한 참조가 많은 곳에서 발견되었습니다. 예 :Windows 헤더 파일에서 "#ifdef _MAC"는 무엇입니까?

// WinUser.h line 1568 
/* 
* Message structure 
*/ 
typedef struct tagMSG { 
    HWND  hwnd; 
    UINT  message; 
    WPARAM  wParam; 
    LPARAM  lParam; 
    DWORD  time; 
    POINT  pt; 
#ifdef _MAC 
    DWORD  lPrivate; 
#endif 
} MSG, *PMSG, NEAR *NPMSG, FAR *LPMSG; 

"Macintosh"는 그대로 표시 되나요? Windows 또는 Windows 하위 집합이 Macintosh 용으로 컴파일 될 수있는 시간이 있었습니까?

답변

13

한 번에 Microsoft는 세계에서 가장 큰 Macintosh 소프트웨어 개발자였습니다. 엑셀과 워드는 매킨토시에서 각각의 시장을 지배했고, 이후 오피스에서도 그렇다. 따라서 MS의 응용 프로그램 부서가 MAC에서 작동하는 Windows 헤더 파일의 하위 집합을 원한다면 크로스 플랫폼 소프트웨어를 유지 관리하기가 더 쉽습니다.

그러나 Macintosh에서는 실행 된 Windows OS 버전이 없었습니다. 어떤 경우

,이 조각은 objidl.h에서이다, 다른 사람이 언급 한 것처럼

//FSSpec is Macintosh only, defined in macos\files.h 
#ifdef _MAC 
    typedef struct tagSTATSTG 
    {      
     LPOLESTR pwcsName; 
      FSSpec *pspec; 
     DWORD type; 
     ULARGE_INTEGER cbSize; 
... 
    } STATSTG; 
#else //_MAC 
3

MacOS 용 Microsoft 소프트웨어 (Office, IE, Windows Media Player)를 컴파일하는 데 사용되었다고 가정합니다. Solaris 용 IE와 WMP에는 해당 Windows DLL을 직접 대체하는 Windows 자체 (예 : libwinnt.so, libkernel32.so)의 하위 집합이 포함되어 있습니다.

+0

Windows 용 iTunes를 볼 때와 비슷한 종류의'.plist' 파일과'Foundation.framework' 또는 이와 유사한 IIRC라는 것을 볼 수 있습니다. – asveikau

+0

@asveikau : 예.Windows 용 많은 Apple 제품은 MacOS의 모양과 느낌을 가져옵니다 (Solaris 용 Microsoft 제품처럼). MacOS를 다른 방법으로 사용하고 API와 같은 MacOS를 Windows 용 래퍼로 제공합니다. – jarnbjo

+0

@jarnbjo 사실 ObjC 라이브러리의 경우 Mac OS X보다 훨씬 앞서 있습니다. IIRC, NeXT는 90 년대 NT에서 Foundation/AppKit을 운영했습니다. – asveikau

1

많은 MS 코드는 Mac 용으로 개발되어 MAC에 대한 참조를 포함합니다 (예 : 사무실). 아마도 헤더 파일의이 비트가 해당 팀에서 나왔을 것입니다.

+4

사무실 * 사무실이 아닙니다. (나는 당신을보고있다, 그들의 이력서에 JAVA를 놓는 사람들 ...) –

+0

그냥 답답함을 편집하십시오 :-) –

8

, 마이크로 소프트 애플리케이션을 포팅 한 ... 헤더는하지만 파일에 _MAC 실제로 매킨토시을 의미 않는 것을 나타냅니다 보인다 그리고 아마도 그들은 애플 리케이션 자체를 다시 작성하기보다는 기본 API/프레임 워크를 휴대용 추상화 계층으로 변환하는 것이 더 쉬웠다 고 생각했을 것입니다. QuickTime 팀이 반대 방향 (Mac에서 Windows 로의 포팅 - - Mac의 Carbon 헤더에 유사한 #if WIN32 조건이 있습니다.) 예를 들어 전체 Win32 앱의 코드 기반이 CreateFile()을 찾고 #ifdefs를 사용하여 각 참조를 바꾸거나 조건부로 작성하면 Mac 버전의 CreateFile()을 작성하고 완료해야합니다. 각 Win32 API 호출에 대해 반복하십시오.

놀라운 역사적인 퀴즈는 Microsoft의 포팅 노력의 결과가 "Microsoft Visual C++ Cross-Development Edition for Macintosh"형식으로 제 3 자에게 제공되었음을 나타냅니다. 그래서 누구나 Win32 앱을 가져 와서이 추상화 레이어를 사용하여 Mac으로 포팅 할 수 있습니다. 내 믿음직한 MSDN 1996년 10월 CD에서

인용구 :

"의 Microsoft Visual C++ 버전 Macintosh 용 4.0 크로스 개발 Edition은 애플 Microsoft Windows 운영 환경에 대한 프로그램의 전송 매킨토시 또는 파워 매킨토시 환경을 680x0에서을 용이하게합니다. 완벽한 프로그램 개발 환경을 제공하도록 설계된 Macintosh 용 Visual C++는 C, 표준 C 런타임 라이브러리, C++, OLE 및 ODBC를 비롯한 Microsoft Win32 API의 대부분과 Microsoft Foundation Class Library를 지원합니다. "

그래서 MFC도 포함되었습니다. 내 생각 엔 모든 "#ifdef _MAC"는 Macintosh (R.I.P.) 용 MSVC++ 교차 개발 버전의 아티팩트입니다.

+0

감사의 좋은 비트, 감사합니다. – zildjohn01

관련 문제