Skip to content

Commit feb7462

Browse files
committed
[win32] RP_ShellIconOverlayIdentifier: Use HMODULE_deleter.
1 parent 790011b commit feb7462

2 files changed

Lines changed: 14 additions & 16 deletions

File tree

src/win32/RP_ShellIconOverlayIdentifier.cpp

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
* ROM Properties Page shell extension. (Win32) *
33
* RP_ShellIconOverlayIdentifier.cpp: IShellIconOverlayIdentifier *
44
* *
5-
* Copyright (c) 2016-2025 by David Korth. *
5+
* Copyright (c) 2016-2026 by David Korth. *
66
* SPDX-License-Identifier: GPL-2.0-or-later *
77
***************************************************************************/
88

@@ -16,8 +16,9 @@ using namespace LibRpBase;
1616
using namespace LibRpFile;
1717
using namespace LibRomData;
1818

19-
// C++ STL classes.
19+
// C++ STL classes
2020
using std::string;
21+
using std::unique_ptr;
2122

2223
// CLSID
2324
const CLSID CLSID_RP_ShellIconOverlayIdentifier =
@@ -32,20 +33,12 @@ RP_ShellIconOverlayIdentifier_Private::RP_ShellIconOverlayIdentifier_Private()
3233
#if 0
3334
: romData(nullptr)
3435
#endif
35-
: hShell32_dll(nullptr)
36-
, pfnSHGetStockIconInfo(nullptr)
36+
: pfnSHGetStockIconInfo(nullptr)
3737
{
3838
// Get SHGetStockIconInfo().
39-
hShell32_dll = LoadLibraryEx(_T("shell32.dll"), nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32);
39+
hShell32_dll.reset(LoadLibraryEx(_T("shell32.dll"), nullptr, LOAD_LIBRARY_SEARCH_SYSTEM32));
4040
if (hShell32_dll) {
41-
pfnSHGetStockIconInfo = (pfnSHGetStockIconInfo_t)GetProcAddress(hShell32_dll, "SHGetStockIconInfo");
42-
}
43-
}
44-
45-
RP_ShellIconOverlayIdentifier_Private::~RP_ShellIconOverlayIdentifier_Private()
46-
{
47-
if (hShell32_dll) {
48-
FreeLibrary(hShell32_dll);
41+
pfnSHGetStockIconInfo = (pfnSHGetStockIconInfo_t)GetProcAddress(hShell32_dll.get(), "SHGetStockIconInfo");
4942
}
5043
}
5144

src/win32/RP_ShellIconOverlayIdentifier_p.hpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
* RP_ShellIconOverlayIdentifier_p.hpp: IShellIconOverlayIdentifier *
44
* (PRIVATE CLASS) *
55
* *
6-
* Copyright (c) 2016-2025 by David Korth. *
6+
* Copyright (c) 2016-2026 by David Korth. *
77
* SPDX-License-Identifier: GPL-2.0-or-later *
88
***************************************************************************/
99

@@ -15,6 +15,12 @@
1515
#include "librpbase/RomData.hpp"
1616
#include "librpfile/IRpFile.hpp"
1717

18+
// C++ STL classes
19+
#include <memory>
20+
21+
// HMODULE deleter for std::unique_ptr<>
22+
#include "HMODULE_deleter.hpp"
23+
1824
// Workaround for RP_D() expecting the no-underscore naming convention.
1925
#define RP_ShellIconOverlayIdentifierPrivate RP_ShellIconOverlayIdentifier_Private
2026

@@ -25,14 +31,13 @@ class RP_ShellIconOverlayIdentifier_Private
2531
{
2632
public:
2733
RP_ShellIconOverlayIdentifier_Private();
28-
~RP_ShellIconOverlayIdentifier_Private();
2934

3035
private:
3136
RP_DISABLE_COPY(RP_ShellIconOverlayIdentifier_Private)
3237

3338
public:
3439
// SHGetStockIconInfo() for the UAC shield icon.
40+
std::unique_ptr<HMODULE, HMODULE_deleter> hShell32_dll;
3541
typedef HRESULT (STDAPICALLTYPE *pfnSHGetStockIconInfo_t)(_In_ SHSTOCKICONID siid, _In_ UINT uFlags, _Out_ SHSTOCKICONINFO *psii);
36-
HMODULE hShell32_dll;
3742
pfnSHGetStockIconInfo_t pfnSHGetStockIconInfo;
3843
};

0 commit comments

Comments
 (0)