2010-03-04 7 views
15

Przeglądałem pliki nagłówkowe Windows SDK platformy (co za życie, prawda?) I zauważyłem, że wiele miejsc zawierało odniesienia do symbolu preprocesora _MAC. Na przykład:Co jest z "#ifdef _MAC" w plikach nagłówkowych Windows?

// 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; 

Czy to oznacza "Macintosh", jak się wydaje? Czy był czas, w którym system Windows lub podzbiór systemu Windows mógłby zostać skompilowany dla komputerów Macintosh?

Odpowiedz

13

W pewnym momencie Microsoft był największym producentem oprogramowania Macintosh na świecie. Excel i Word dominowały na swoich rynkach na Macintoshu, a później także Office. Nie jest więc zaskakujące, że dział aplikacji w MS chciałby mieć podzbiór plików nagłówkowych Windows, które działały na MAC-u, aby ich oprogramowanie na wielu platformach było łatwiejsze w utrzymaniu.

Ale nigdy nie było żadnej wersji systemu operacyjnego Windows uruchomionej na komputerze Macintosh.

W każdym razie, ten fragment jest z objidl.h, wydaje się wskazywać, że _MAC rzeczywiście myśli Macintosh w plikach nagłówka choć ...

//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

Zakładam, że jest/był używany do kompilowania oprogramowania Microsoft (Office, IE, Windows Media Player) na MacOS. Wiem, że IE i WMP dla Solaris zawierały podzbiór samego systemu Windows (np. Libwinnt.so, libkernel32.so) jako bezpośredni zamiennik odpowiednich bibliotek DLL systemu Windows.

+0

W podobny sposób, patrząc na iTunes dla Windows, widzisz kilka plików '.plist' i coś o nazwie' Foundation.framework' lub podobnych, IIRC. – asveikau

+0

@asveikau: Pewnie.Wiele produktów Apple dla Windows nawet przynosi z nimi wygląd MacOS (tak jak zrobiły to produkty Microsoftu dla Solaris), więc myślę, że robią to na odwrót i zapewniają MacOS, takie jak API jako otoki wokół Windows. – jarnbjo

+0

@jarnbjo Właściwie dla tych bibliotek ObjC jest to znacznie wcześniejsze niż Mac OS X. IIRC, NeXT miał Foundation/AppKit działa pod NT w latach 90-tych. – asveikau

1

Wiele kodów MS ma odniesienia do MAC, ponieważ rozwija się również dla mac - na przykład biuro. Prawdopodobnie ten fragment pliku nagłówkowego pochodzi od tych zespołów.

+4

Biuro * nie biuro. (Patrzę na ciebie, ludzi, którzy wkładają JAVĘ w swoje CV ...) –

+0

po prostu edytuj odpowiedź damit :-) –

8

jak inni to zauważyli, aplikacje Microsoft zostały przeniesione do Mac i prawdopodobnie łatwiej było przekształcić podstawowe API/struktury w przenośną warstwę abstrakcji, zamiast przepisać same aplikacje ... tak jak zespół QuickTime podobno zrobił podczas przenoszenia w odwrotnym kierunku (z Maca na Windowsa - - są podobne warianty #if WIN32 w nagłówkach Carbon Maca). Np. Zamiast przeszukiwać całą bazę kodu aplikacji Win32, szukającą CreateFile() i zastępując lub warunkując każdy odnośnik za pomocą #ifdefs, po prostu utwórz wersję Mac CreateFile() i zrób to. Powtórz dla każdego wywołania Win32 API.

Zaskakujący fragment historycznych ciekawostek jest następujący: końcowy efekt wysiłków Microsoft w zakresie przenoszenia był dostępny dla stron trzecich w formie "Microsoft Visual C++ Cross-Development Edition dla komputerów Macintosh". Tak więc każdy mógł wziąć swoją aplikację Win32 i przenieść ją na Maca używając tej warstwy abstrakcji.

Cytat z mojego wiernego MSDN października 1996 CD:

„Microsoft Visual C++ w wersji 4.0 Cross-Development Edition dla komputerów Macintosh ułatwia przenoszenie programów dla środowiska operacyjnego Microsoft Windows do Apple 680x0 Macintosh i Power Macintosh środowiska. Zaprojektowany, aby zapewnić pełne środowisko programistyczne, Visual C++ dla komputerów Macintosh obsługuje C, standardową bibliotekę C czasu pracy, C++, większość Microsoft Win32 API, w tym OLE i ODBC, i Microsoft Foundation Class Library. "

Więc zawierał nawet MFC. Domyślam się, że każdy "#ifdef _MAC" jest artefaktem MSVC++ Cross-Development Edition dla Macintosh (R.I.P.).

+0

Fajna historia, dziękuję. – zildjohn01

Powiązane problemy