2010-03-04 13 views
15

Tôi đang duyệt qua các tệp tiêu đề SDK nền tảng của Windows (cuộc sống, đúng không?) Và tôi nhận thấy nhiều nơi chứa tham chiếu đến ký hiệu tiền xử lý _MAC. Ví dụ:Có gì với "#ifdef _MAC" trong các tệp tiêu đề của 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; 

Điều này có nghĩa là "Macintosh", khi nó xuất hiện? Có một thời gian Windows hoặc một tập hợp con của Windows có thể được biên dịch cho Macintosh không?

Trả lời

13

Có một lần Microsoft là nhà phát triển phần mềm Macintosh lớn nhất thế giới. Excel và Word thống trị thị trường tương ứng của họ trên Macintosh, và sau đó là Office. Vì vậy, nó không phải là đáng ngạc nhiên rằng các bộ phận ứng dụng tại MS sẽ muốn một tập hợp con của các tập tin tiêu đề Windows mà làm việc trên MAC - để làm cho phần mềm nền tảng của họ dễ dàng hơn để duy trì.

Nhưng chưa bao giờ có bất kỳ phiên bản nào của Hệ điều hành Windows chạy trên Macintosh.

Trong mọi trường hợp, đoạn này là từ objidl.h, dường như để cho biết rằng _MAC không thực sự có nghĩa là Macintosh trong tiêu đề tập tin mặc dù ...

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

Tôi cho rằng nó được sử dụng để biên dịch phần mềm Microsoft (Office, IE, Windows Media Player) cho MacOS. Tôi biết rằng IE và WMP cho Solaris bao gồm một tập hợp con của chính Windows (ví dụ: libwinnt.so, libkernel32.so) như là một thay thế trực tiếp cho các tệp DLL Windows tương ứng.

+0

Loại tương tự như cách nhìn vào iTunes cho Windows, bạn thấy một loạt tệp '.plist' và một cái gì đó gọi là' Foundation.framework' hoặc tương tự, IIRC. – asveikau

+0

@asveikau: Chắc chắn rồi.Nhiều sản phẩm của Apple cho Windows thậm chí mang lại cho MacOS vẻ ngoài và cảm nhận (giống như các sản phẩm của Microsoft dành cho Solaris), vì vậy tôi đoán họ làm theo cách khác xung quanh và cung cấp MacOS như API như một trình bao bọc xung quanh Windows. – jarnbjo

+0

@jarnbjo Trên thực tế, đối với các thư viện ObjC này, trước hết là Mac OS X. IIRC, NeXT có Foundation/AppKit hoạt động theo NT trong thập niên 90. – asveikau

1

Nhiều mã MS có tham chiếu đến MAC khi chúng cũng phát triển cho mac - ví dụ như văn phòng. Có lẽ bit này của tệp tiêu đề đến từ các nhóm đó.

+4

Office * không phải VĂN PHÒNG. (Tôi đang xem bạn, những người đưa JAVA vào hồ sơ của họ ...) –

+0

chỉ cần chỉnh sửa câu trả lời :-) –

8

Như những người khác đã lưu ý, ứng dụng Microsoft đã được chuyển đến Mac, và họ có thể tìm thấy dễ dàng hơn để biến các API/khung bên dưới thành lớp trừu tượng di động, thay vì tự viết lại ứng dụng ... giống như nhóm QuickTime được báo cáo khi chuyển sang hướng ngược lại (từ Mac sang Windows - - Có #if điều kiện WIN32 tương tự trong tiêu đề Carbon của Mac). Ví dụ: thay vì riffle mặc dù toàn bộ cơ sở mã của ứng dụng Win32 tìm kiếm CreateFile() và thay thế hoặc điều kiện hóa từng tham chiếu bằng #ifdefs, chỉ cần tạo phiên bản Mac của CreateFile() và được thực hiện với nó. Lặp lại cho mỗi cuộc gọi API Win32.

Một chút đáng ngạc nhiên của lịch sử đố là: kết quả cuối cùng của nỗ lực chuyển của Microsoft đã có sẵn cho bên thứ ba dưới dạng "Microsoft Visual C++ Phiên bản phát triển chéo cho Macintosh". Vì vậy, bất cứ ai có thể lấy ứng dụng Win32 của họ và chuyển nó sang Mac bằng cách sử dụng lớp trừu tượng này.

Trích từ đáng tin cậy của đĩa CD MSDN Tháng Mười 1996 tôi:

"Microsoft Visual C++ phiên bản 4.0 Cross-Phát triển Edition cho Macintosh tạo điều kiện cho việc chuyển giao chương trình cho môi trường điều hành Microsoft Windows để Apple 680x0 Macintosh hoặc Power Macintosh môi trường. Được thiết kế để cung cấp môi trường phát triển chương trình hoàn chỉnh, Visual C++ cho Macintosh hỗ trợ C, thư viện C thời gian chạy chuẩn, C++, hầu hết API Microsoft Win32 bao gồm OLE và ODBC và Thư viện lớp Microsoft Foundation. "

Vì vậy, nó thậm chí còn bao gồm MFC. Tôi đoán là bất kỳ "#ifdef _MAC" nào là một tạo phẩm của phiên bản phát triển chéo MSVC++ cho Macintosh (R.I.P.).

+0

Một chút lịch sử, cảm ơn. – zildjohn01

Các vấn đề liên quan