共用方式為


UpdateResourceW 函式 (winbase.h)

新增、刪除或取代可攜式可執行檔 (PE) 檔案中的資源。 檔案中的資源更新有一些限制,其中包含資源設定 (RC Config) 數據:語言中性 (LN) 檔案和語言特定資源 (.mui) 檔案。

語法

BOOL UpdateResourceW(
  [in]           HANDLE  hUpdate,
  [in]           LPCWSTR lpType,
  [in]           LPCWSTR lpName,
  [in]           WORD    wLanguage,
  [in, optional] LPVOID  lpData,
  [in]           DWORD   cb
);

參數

[in] hUpdate

類型:HANDLE

BeginUpdateResource 函式所傳回的模組句柄,參考要更新的檔案。

[in] lpType

類型:LPCTSTR

要更新的資源類型。 或者,這個參數也可以 MAKEINTRESOURCE(ID),其中 ID 是代表預先定義資源類型的整數值。 如果字串的第一個字元是磅號 (#),則其餘字元代表指定資源類型的整數標識碼的十進位數。 例如,字串 “#258” 代表標識碼 258。

如需預先定義的資源類型清單,請參閱 資源類型

[in] lpName

類型:LPCTSTR

要更新的資源名稱。 或者,這個參數也可以 MAKEINTRESOURCE(ID),其中 ID 是資源識別符。 建立新的資源時,請勿使用以此參數 『#』 字元開頭的字串。

[in] wLanguage

類型:WORD

要更新之資源的 語言標識子。 如需組成語言標識碼的主要語言標識碼和子語言標識符清單,請參閱 MAKELANGID 巨集。

[in, optional] lpData

類型:LPVOID

要插入檔案的資源數據,hUpdate所指示。 如果資源是其中一個預先定義的類型,數據必須有效且正確對齊。 請注意,這是要儲存在 hUpdate所指示之檔案的原始二進位數據,而不是由 LoadIconLoadString或其他資源特定的載入函式所提供的數據。 包含字串或文字的所有數據都必須以 Unicode 格式。 lpData 不得指向 ANSI 數據。

如果 lpDataNULL,且 cbData 為 0,則會從 hUpdate 所指示的檔案中刪除指定的資源。

[in] cb

類型:DWORD

lpData的資源數據大小,以位元組為單位。

傳回值

類型:BOOL

如果成功或 FALSE 則傳回 TRUE TRUE。 若要取得擴充的錯誤資訊,請呼叫 GetLastError

言論

建議您在呼叫此函式之前,不會載入資源檔。 不過,如果該檔案已載入,則不會傳回錯誤。

應用程式可以使用 UpdateResource 重複對資源數據進行變更。 每次呼叫 updateResource 都會造成新增、刪除和取代的內部清單,但實際上不會將數據寫入 hUpdate所指示的檔案。 應用程式必須使用 EndUpdateResource 函式,將累積的變更寫入檔案。

此函式可以更新包含程式代碼和資源之模組內的資源。

在 Windows 7 之前 如果 lpData是 NULLcbData 為非零,則不會刪除指定的資源,並擲回例外狀況。

從 Windows Vista 開始: 如上所述,包含 RC 組態數據之檔案中的資源更新有限制:LN 檔案和 .mui 檔案。 限制如下:

行動 LN 檔案 .mui 檔案
1.新增 LN 或 .mui 檔案中不存在的新類型。 在 LN 檔案中新增類型,並視為語言中性(不可當地語系化),並在 RC Config 資料中新增類型或專案 唯一允許的新增專案是下列類型:檔案版本、RC 組態數據、並存元件 XML 指令清單。
2.將新的資源專案新增至現有的類型。 使用 RC 組態數據來檢查類型是否存在於與此 LN 檔案相關聯的 .mui 檔案中。 如果類型不存在於 .mui 檔案中,請新增專案,並將新專案視為無法當地語系化。 如果類型存在於 .mui 檔案中,則不允許新增 。 只能新增下列類型的專案:檔案版本、RC 組態數據、並存元件 XML 指令清單。
3.更新資源專案。 使用 RC 組態數據來檢查類型是否存在於與 LN 檔案相關聯的 .mui 檔案中。 如果 .mui 檔案中沒有類型,則 LN 檔案中允許此資源專案更新。 否則,如果類型存在於與此 LN 檔案相關聯的 .mui 檔案中,則不允許此更新。 唯一允許的更新是下列類型的專案:檔案版本、RC 設定數據、並存元件 XML 指令清單。
4.新增新語言的類型/專案。 不允許。 不允許。
5.移除現有的類型/專案。 運作方式與案例 3 類似。 使用 RC 組態數據來檢查類型是否存在於與 LN 檔案相關聯的 .mui 檔案中。 如果沒有,則允許從 LN 檔案中移除類型/專案。 否則,如果類型/專案存在於與此 LN 檔案相關聯的 .mui 檔案中,則不允許移除。 唯一允許移除的類型包括:檔案版本、RC 組態數據、並存元件 XML 指令清單;此外,只能移除這些類型的專案。
6.新增/刪除/更新 RC 組態資料中未包含的類型(例如版本、並存元件 XML 指令清單或 RC 設定數據本身)。 允許。 允許。
7. 其他無法本地化的數據更新,例如 TYPELIB、reginst 等等。 更新 LN 檔案中的類型或專案、將 視為不可當地語系化,並在 RC Config 資料中新增類型或專案。 不適用。
8.新增 RC 組態數據。 可以完成,但不會檢查 RC 組態數據的完整性。 可以完成,但不會檢查 RC 組態數據的完整性。
 

例子

如需範例,請參閱 更新資源

注意

winbase.h 標頭會將 UpdateResource 定義為別名,根據 UNICODE 預處理器常數的定義,自動選取此函式的 ANSI 或 Unicode 版本。 混合使用編碼中性別名與非編碼中性的程序代碼,可能會導致編譯或運行時間錯誤不符。 如需詳細資訊,請參閱函式原型的 慣例。

要求

要求 價值
最低支援的用戶端 Windows 2000 Professional [僅限傳統型應用程式]
支援的最低伺服器 Windows 2000 Server [僅限傳統型應用程式]
目標平臺 窗戶
標頭 winbase.h (包括 Windows.h)
連結庫 Kernel32.lib
DLL Kernel32.dll

另請參閱

BeginUpdateResource

概念

EndUpdateResource

LoadIcon

LoadString

LockResource

MAKEINTRESOURCE

MAKELANGID

其他資源

參考

資源

SizeofResource