2010-03-04 15 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

相关问题