共用方式為


定位特定 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 開關和 [異步] 屬性、管道 類型建構子、/Oif 編譯器選項,以及 [user_marshal] 和 [wire_marshal] 屬性。 使用這些功能的程式存根不會在較早期的系統上執行。

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

針對 Windows 2000 或更新版本進行建置

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

    CFLAGS = $(CFLAGS) -D_WIN32_WINNT=0x500
    

/目標

/robust

異步

async_uuid

/Oi

管道

wire_marshal

user_marshal

調度 OLE 資料類型