zil*_*n01 15 winapi platform-sdk
我正在浏览Windows的Platform SDK头文件(生活,对吧?),我注意到很多地方都包含对预处理器符号的引用_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;
Run Code Online (Sandbox Code Playgroud)
这是否意味着"Macintosh"?是否有时间可以为Macintosh编译Windows或Windows的子集?
Joh*_*ler 14
有一段时间,微软是全球最大的Macintosh软件开发商.Excel和Word在Macintosh上占据了各自的市场,后来Office也是如此.因此,MS的应用程序部门想要在MAC上运行的Windows头文件的子集 - 使其跨平台软件更易于维护也就不足为奇了.
但是从来没有任何版本的Windows操作系统在Macintosh上运行.
在任何情况下,这个片段来自objidl.h,似乎表明_MAC确实意味着头文件中的Macintosh虽然......
//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
Run Code Online (Sandbox Code Playgroud)
小智 9
正如其他人已经注意到的那样,微软的应用程序被移植到Mac上,他们可能更容易将底层API /框架转换为可移植的抽象层,而不是自己重写应用程序......就像据报道QuickTime团队在移植时所做的那样在相反的方向(从Mac到Windows - 在Mac的Carbon标题中有类似的#if WIN32条件).例如,尽管您的整个Win32应用程序的代码库正在寻找CreateFile()并用#ifdefs替换或条件化每个引用,但只需创建一个Mac版本的CreateFile()并完成它.对每个Win32 API调用重复此操作.
令人惊讶的历史琐事就是这样:微软移植工作的最终结果可以通过"Microsoft Visual C++ Cross-Development Edition for Macintosh"的形式提供给第三方.所以任何人都可以使用他们的Win32应用程序并使用此抽象层将其移植到Mac.
引用我可靠的MSDN 1996年10月CD:
"用于Macintosh的Microsoft Visual C++版本4.0 Cross-Development Edition有助于将Microsoft Windows操作环境的程序传输到Apple 680x0 Macintosh或Power Macintosh环境.旨在提供完整的程序开发环境,Visual C++ for Macintosh支持C,标准C运行时库,C++,大多数Microsoft Win32 API,包括OLE和ODBC,以及Microsoft基础类库."
所以它甚至包括MFC.我的猜测是,任何"#ifdef _MAC"都是MSVC++ Cross-Development Edition for Macintosh(RIP)的工件.
我认为它用于为 MacOS 编译 Microsoft 软件(Office、IE、Windows Media Player)。我知道 Solaris 的 IE 和 WMP 包含 Windows 本身的一个子集(例如 libwinnt.so、libkernel32.so),作为相应 Windows DLL 的直接替代。
归档时间: |
|
查看次数: |
2585 次 |
最近记录: |