以特定 32 位或 64 位平臺為目標的存根

Microsoft RPC 和 MIDL 3.0 和更新版本的一些功能是平臺特定的。

作為預防措施,MIDL 3.0 和更新版本的編譯程式會產生防護,有助於在 C 編譯階段進行相容性檢查。 MIDL 會產生兩種類型的防護:平臺相依防護(32 位與 64 位)和發行相依防護(功能集相依性)。 例如,MIDL 會產生下列防護,以防止其他平臺的32位存根進行 C 編譯:

#if !defined(__RPC_WIN32__)
#error  Invalid build platform for this stub.
#endif

發行相依防護是由已處理IDL檔案 和 /target 參數中找到的一組功能所觸發。 例如,如果介面只使用 Windows 2000 或更新版本支援的功能,MIDL 會使用 TARGET_IS_NT50_OR_LATER 宏產生防護。

在 Rpcndr.h 中定義的防護宏取決於 WINVER 和 _WIN32_WINNT 的設定,並由 C/C++ 編譯程式評估。

如果在 C 編譯階段,您會收到錯誤訊息,指出您需要特定平台來執行存根,請先檢查以確定您尚未使用此平臺上可用的功能。 觸發特定防護的功能會列在防護主體中。 在上述範例中,-Oicf 編譯程序參數觸發了防護。 這類值得注意的功能包括 Windows 2000 和更新版本的 /robust 參數和 [async] 屬性、管道類型建構函式、/Oif 編譯程序選項,以及 [user_marshal] 和 [wire_marshal] 屬性。 使用這些功能的存根不會在舊版系統上執行。

如果您知道目標平台對於您使用的功能是正確的,但仍會收到錯誤,您可能需要適當地設定環境變數。

建置 Windows 2000 或更新版本

  • 將這一行新增至您的makefile:

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/target

/魯 棒

async

async_uuid

/Oi

wire_marshal

user_marshal

封送處理 OLE 資料類型