2010-03-04 50 views
15

我正在瀏覽Windows平臺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

曾經,微軟是世界上最大的Macintosh軟件開發商。 Excel和Word在Macintosh上佔據了各自的市場,後來Office也是如此。因此,MS的應用程序部門想要在MAC上運行的Windows頭文件的一部分 - 使他們的跨平臺軟件更容易維護並不奇怪。

但是從未有任何版本的Windows操作系統在Macintosh上運行。

在任何情況下,該片段是從objidl.h,似乎表明_MAC確實意味着蘋果在頭文件雖然...

//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本身的一個子集(例如,libwinnt.so,libkernel32.so)作爲相應Windows DLL的直接替代品。

+0

有點類似於在Windows版iTunes中看到一堆'.plist'文件和一些名爲'Foundation.framework'或類似的IIRC的東西。 – asveikau 2010-03-04 02:41:14

+0

@asveikau:當然。很多針對Windows的蘋果產品甚至帶來了MacOS的外觀和感覺(就像微軟的Solaris產品一樣),所以我想他們是這樣做的,並且提供類似API的MacOS作爲Windows的包裝。 – jarnbjo 2010-03-04 03:01:49

+0

@jarnbjo實際上,對於這些ObjC庫,這大大早於Mac OS X。 IIRC,NeXT在90年代在NT下運行了Foundation/AppKit。 – asveikau 2010-03-04 03:32:29

1

很多MS代碼都提及MAC,因爲它們也是爲mac開發的 - 例如office。頭文件的這一點可能來自這些團隊。

+4

辦公室*不辦公室。 (我正看着你,把簡歷放在JAVA上的人......) – 2010-03-04 02:35:22

+0

只是編輯答案damit :-) – 2010-03-04 03:17:58

8

正如其他人指出,微軟的應用程序被移植到Mac,他們可能發現將底層API /框架轉變爲可移植的抽象層更容易,而不是自己重寫應用程序......就像QuickTime團隊據報道在相反方向移植時一樣(從Mac到Windows - - 在Mac的Carbon頭文件中有類似的#if WIN32條件)。例如,儘管你的整個Win32應用程序的代碼庫尋找CreateFile()並用#ifdefs代替或條件化每個引用,但只需創建一個Mac版本的CreateFile()並完成它即可。重複每個Win32 API調用。

令人驚訝的歷史瑣事是:微軟移植工作的最終結果是以「Microsoft Visual C++交叉開發版for Macintosh」的形式提供給第三方。所以任何人都可以使用它的Win32應用程序並使用這個抽象層將它移植到Mac。從我的信賴1996年MSDN十月CD

報價:

「微軟的Visual C++版本4.0交叉開發版的Macintosh有利於爲Microsoft Windows操作系統環境下的蘋果程序轉移680x0上Macintosh或電源Macintosh環境。旨在提供完整的程序開發環境的Visual C++ for Macintosh支持C,標準C運行時庫,C++,大多數Microsoft Win32 API(包括OLE和ODBC)以及Microsoft基礎類庫。「

所以它甚至包括MFC。我的猜測是,任何「#ifdef _MAC」都是Macintosh的MSVC++交叉開發版(R.I.P.)的人工產物。

+0

好的歷史,謝謝。 – zildjohn01 2010-12-09 01:47:10

相關問題