以特定 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
相關主題