Clean up WinSparkle code

Clean up WinSparkle code
This commit is contained in:
Andy Vandijck 2025-06-27 09:57:59 +02:00
parent e40c1e7140
commit 77f49ac671
3 changed files with 13 additions and 38 deletions

View File

@ -793,7 +793,7 @@ if(WIN32 AND (X86_64 OR ARM64 OR X86_32) AND ENABLE_ONLINEUPDATES)
endif() endif()
target_sources(visualboyadvance-m PRIVATE target_sources(visualboyadvance-m PRIVATE
autoupdater/wxmsw/autoupdater.cpp@ autoupdater/wxmsw/autoupdater.cpp
autoupdater/wxmsw/winsparkle-rc.h autoupdater/wxmsw/winsparkle-rc.h
autoupdater/wxmsw/winsparkle-wrapper.cpp autoupdater/wxmsw/winsparkle-wrapper.cpp
autoupdater/wxmsw/winsparkle-wrapper.h) autoupdater/wxmsw/winsparkle-wrapper.h)

View File

@ -19,37 +19,10 @@ WinSparkleDllWrapper *WinSparkleDllWrapper::GetInstance()
return &instance; return &instance;
} }
extern "C" {
func_win_sparkle_init ws_init;
func_win_sparkle_check_update_with_ui ws_cu_wui;
func_win_sparkle_set_appcast_url ws_saurl;
func_win_sparkle_set_app_details ws_sad;
func_win_sparkle_cleanup ws_cu;
HMODULE winsparkle_dll = nullptr;
void winsparkle_load_symbols(wxString path)
{
winsparkle_dll = LoadLibraryW(path.wc_str());
if (winsparkle_dll != nullptr) {
ws_init = reinterpret_cast<func_win_sparkle_init>(GetProcAddress(winsparkle_dll, "win_sparkle_init"));
ws_cu_wui = reinterpret_cast<func_win_sparkle_check_update_with_ui>(GetProcAddress(winsparkle_dll, "win_sparkle_check_update_with_ui"));
ws_saurl = reinterpret_cast<func_win_sparkle_set_appcast_url>(GetProcAddress(winsparkle_dll, "win_sparkle_set_appcast_url"));
ws_sad = reinterpret_cast<func_win_sparkle_set_app_details>(GetProcAddress(winsparkle_dll, "win_sparkle_set_app_details"));
ws_cu = reinterpret_cast<func_win_sparkle_cleanup>(GetProcAddress(winsparkle_dll, "win_sparkle_cleanup"));
}
}
}
WinSparkleDllWrapper::WinSparkleDllWrapper() WinSparkleDllWrapper::WinSparkleDllWrapper()
{ {
wchar_t temp_file_path_w[MAX_PATH + 1]; wxFile temp_file;
GetTempPathW(MAX_PATH, temp_file_path_w); temp_file_name = wxFileName::CreateTempFileName("winsparkle", &temp_file);
wxString temp_file_path = wxString(temp_file_path_w);
wchar_t temp_file_name_w[MAX_PATH + 1];
GetLongPathNameW(temp_file_path.wc_str(), temp_file_name_w, MAX_PATH + 1);
temp_file_name = wxString(temp_file_name_w) + "WinSparkle.dll";
wxFile temp_file = wxFile(temp_file_name, wxFile::write);
HRSRC res = FindResource(wxGetInstance(), MAKEINTRESOURCE(WINSPARKLE_DLL_RC), RT_RCDATA); HRSRC res = FindResource(wxGetInstance(), MAKEINTRESOURCE(WINSPARKLE_DLL_RC), RT_RCDATA);
if (!res) if (!res)
@ -67,13 +40,15 @@ WinSparkleDllWrapper::WinSparkleDllWrapper()
temp_file.Write((void *)res_data, res_size); temp_file.Write((void *)res_data, res_size);
temp_file.Close(); temp_file.Close();
winsparkle_load_symbols(temp_file_name); winsparkle_dll = LoadLibraryW(temp_file_name.wc_str());
winsparkle_init = ws_init; if (winsparkle_dll != nullptr) {
winsparkle_check_update_with_ui = ws_cu_wui; winsparkle_init = reinterpret_cast<func_win_sparkle_init>(GetProcAddress(winsparkle_dll, "win_sparkle_init"));
winsparkle_set_appcast_url = ws_saurl; winsparkle_check_update_with_ui = reinterpret_cast<func_win_sparkle_check_update_with_ui>(GetProcAddress(winsparkle_dll, "win_sparkle_check_update_with_ui"));
winsparkle_set_app_details = ws_sad; winsparkle_set_appcast_url = reinterpret_cast<func_win_sparkle_set_appcast_url>(GetProcAddress(winsparkle_dll, "win_sparkle_set_appcast_url"));
winsparkle_cleanup = ws_cu; winsparkle_set_app_details = reinterpret_cast<func_win_sparkle_set_app_details>(GetProcAddress(winsparkle_dll, "win_sparkle_set_app_details"));
winsparkle_cleanup = reinterpret_cast<func_win_sparkle_cleanup>(GetProcAddress(winsparkle_dll, "win_sparkle_cleanup"));
}
} }

View File

@ -11,8 +11,6 @@ extern "C" {
typedef void (__cdecl *func_win_sparkle_set_appcast_url)(const char*); typedef void (__cdecl *func_win_sparkle_set_appcast_url)(const char*);
typedef void (__cdecl *func_win_sparkle_set_app_details)(const wchar_t*, const wchar_t*, const wchar_t*); typedef void (__cdecl *func_win_sparkle_set_app_details)(const wchar_t*, const wchar_t*, const wchar_t*);
typedef void (__cdecl *func_win_sparkle_cleanup)(); typedef void (__cdecl *func_win_sparkle_cleanup)();
extern HMODULE winsparkle_dll;
} }
class WinSparkleDllWrapper { class WinSparkleDllWrapper {
@ -22,6 +20,8 @@ private:
WinSparkleDllWrapper(); WinSparkleDllWrapper();
~WinSparkleDllWrapper(); ~WinSparkleDllWrapper();
HMODULE winsparkle_dll;
func_win_sparkle_init winsparkle_init = nullptr; func_win_sparkle_init winsparkle_init = nullptr;
func_win_sparkle_check_update_with_ui winsparkle_check_update_with_ui = nullptr; func_win_sparkle_check_update_with_ui winsparkle_check_update_with_ui = nullptr;
func_win_sparkle_set_appcast_url winsparkle_set_appcast_url = nullptr; func_win_sparkle_set_appcast_url winsparkle_set_appcast_url = nullptr;