19

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;

これは「マッキントッシュ」という意味ですか?Windows または Windows のサブセットを Macintosh 用にコンパイルできる時代はありましたか?

4

5 に答える 5

20

マイクロソフトはかつて、世界最大の Macintosh ソフトウェア開発会社でした。Excel と Word は Macintosh でそれぞれの市場を支配し、後に Office も支配しました。したがって、MS のアプリケーション部門が、クロス プラットフォーム ソフトウェアの保守を容易にするために、MAC で機能する Windows ヘッダー ファイルのサブセットを必要とすることは驚くべきことではありません。

しかし、Macintosh で動作する Windows OS のバージョンはありませんでした。

いずれにせよ、このフラグメントは 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
于 2010-03-04T02:33:40.967 に答える
12

他の人が指摘しているように、Microsoft アプリは Mac に移植されました。彼らはおそらく、アプリ自体を書き直すよりも、基礎となる API/フレームワークを移植可能な抽象化レイヤーに変える方が簡単であることに気付きました... 移植時に QuickTime チームが行ったと伝えられているように反対方向 (Mac から Windows -- Mac の Carbon ヘッダーには、同様の #if WIN32 条件があります)。たとえば、Win32 アプリのコード ベース全体を調べて CreateFile() を探し、各参照を #ifdefs で置換または条件付けするのではなく、Mac バージョンの CreateFile() を作成してそれで完了します。Win32 API 呼び出しごとに繰り返します。

驚くべき歴史的トリビアは次のとおりです。Microsoft の移植作業の最終結果は、"Microsoft Visual C++ Cross-Development Edition for Macintosh" の形でサード パーティに提供されました。したがって、この抽象化レイヤーを使用して、誰でも自分の Win32 アプリを Mac に移植できます。

信頼できる MSDN の 1996 年 10 月の CD からの引用:

「Microsoft Visual C++ バージョン 4.0 Cross-Development Edition for Macintosh は、Microsoft Windows オペレーティング環境から Apple 680x0 Macintosh または Power Macintosh 環境へのプログラムの移行を容易にします。完全なプログラム開発環境を提供するように設計された Visual C++ for Macintosh は、C をサポートします。標準の C ランタイム ライブラリ、C++、OLE や ODBC を含むほとんどの Microsoft Win32 API、および Microsoft Foundation Class Library."

そのため、MFC も含まれていました。私の推測では、"#ifdef _MAC" は、MSVC++ Cross-Development Edition for Macintosh (RIP) の成果物であると考えられます。

于 2010-12-09T00:22:17.953 に答える
4

MacOS用のMicrosoftソフトウェア(Office、IE、Windows Media Player)のコンパイルに使用されたと思います。IEとWMPforSolarisには、対応するWindows DLLの直接の代替として、Windows自体のサブセット(例:libwinnt.so、libkernel32.so)が含まれていることを知っています。

于 2010-03-04T02:24:31.980 に答える
1

多くのMSコードには、Mac用に開発されたMACへの参照があります(たとえば、オフィス)。おそらく、ヘッダーファイルのこのビットはそれらのチームからのものです。

于 2010-03-04T02:25:07.503 に答える