diff --git a/samples/CPlusPlusWin32/VeloCppWinSample.cpp b/samples/CPlusPlusWin32/VeloCppWinSample.cpp index c33691e9..f8e5ac7a 100644 --- a/samples/CPlusPlusWin32/VeloCppWinSample.cpp +++ b/samples/CPlusPlusWin32/VeloCppWinSample.cpp @@ -5,8 +5,10 @@ #include #include #include +#include + #include "constants.h" -#include "../../Velopack.hpp" +#include "Velopack.h" #pragma comment(linker, \ "\"/manifestdependency:type='Win32' "\ @@ -17,13 +19,15 @@ "language='*'\"") #pragma comment(lib, "ComCtl32.lib") +using namespace Velopack; + HINSTANCE hInst; const WCHAR szTitle[] = L"Velopack C++ Sample App"; const WCHAR szWindowClass[] = L"VeloCppWinSample"; -std::shared_ptr updInfo{}; + +std::optional managerOpt = std::nullopt; +std::optional updInfo = std::nullopt; bool downloaded = false; -Velopack::UpdateManagerSync manager{}; -std::string currentVersion = ""; // Forward declarations of functions included in this code module: int MessageBoxCentered(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType); @@ -31,70 +35,63 @@ ATOM MyRegisterClass(HINSTANCE hInstance); BOOL InitInstance(HINSTANCE, int); LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM); -std::wstring utf8_to_wstring(std::string const& str); -std::string wstring_to_utf8(std::wstring const& wstr); +std::wstring Utf8ToWString(std::string const& str); +std::string WStringToUtf8(std::wstring const& wstr); int APIENTRY wWinMain(_In_ HINSTANCE hInstance, - _In_opt_ HINSTANCE hPrevInstance, - _In_ LPWSTR lpCmdLine, - _In_ int nCmdShow) + _In_opt_ HINSTANCE hPrevInstance, + _In_ LPWSTR lpCmdLine, + _In_ int nCmdShow) { - UNREFERENCED_PARAMETER(hPrevInstance); + std::cout << "Velopack C++ Sample App" << std::endl; + UNREFERENCED_PARAMETER(hPrevInstance); - try - { - // the first thing we need to do in our app is initialise the velopack sdk - int pNumArgs = 0; - wchar_t** args = CommandLineToArgvW(lpCmdLine, &pNumArgs); - Velopack::startup(args, pNumArgs); - manager.setUrlOrPath(UPDATE_URL); - currentVersion = manager.getCurrentVersion(); - } - catch (std::exception& e) - { - std::string what = e.what(); - std::wstring wideWhat(what.begin(), what.end()); - MessageBoxCentered(nullptr, wideWhat.c_str(), szTitle, MB_OK | MB_ICONERROR); - return 1; - } + // This should run as early as possible in the main method. + // Velopack may exit / restart the app at this point. + // See VelopackApp class for more options/configuration. + VelopackApp::Build().Run(); - MyRegisterClass(hInstance); - if (!InitInstance(hInstance, nCmdShow)) - { - return FALSE; - } + try { + // If the app is not installed, creating an UpdateManager will throw an exception. + managerOpt = UpdateManager(UPDATE_URL); + } + catch (std::exception& e) { + std::wstring what = Utf8ToWString(e.what()); + MessageBoxCentered(nullptr, what.c_str(), szTitle, MB_OK | MB_ICONERROR); + return 1; + } - MSG msg; + MyRegisterClass(hInstance); + if (!InitInstance(hInstance, nCmdShow)) { + return FALSE; + } - // Main message loop: - while (GetMessage(&msg, nullptr, 0, 0)) - { - TranslateMessage(&msg); - DispatchMessage(&msg); - } + // Main message loop: + MSG msg; + while (GetMessage(&msg, nullptr, 0, 0)) { + TranslateMessage(&msg); + DispatchMessage(&msg); + } - return (int)msg.wParam; + return (int)msg.wParam; } ATOM MyRegisterClass(HINSTANCE hInstance) { - WNDCLASSEXW wcex; - - wcex.cbSize = sizeof(WNDCLASSEX); - - wcex.style = CS_HREDRAW | CS_VREDRAW; - wcex.lpfnWndProc = WndProc; - wcex.cbClsExtra = 0; - wcex.cbWndExtra = 0; - wcex.hInstance = hInstance; - wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); - wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); - wcex.lpszClassName = szWindowClass; - wcex.hIcon = 0; - wcex.hIconSm = 0; - wcex.lpszMenuName = 0; - - return RegisterClassExW(&wcex); + WNDCLASSEXW wcex; + wcex.cbSize = sizeof(WNDCLASSEX); + wcex.style = CS_HREDRAW | CS_VREDRAW; + wcex.lpfnWndProc = WndProc; + wcex.cbClsExtra = 0; + wcex.cbWndExtra = 0; + wcex.hInstance = hInstance; + wcex.hCursor = LoadCursor(nullptr, IDC_ARROW); + wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); + wcex.lpszClassName = szWindowClass; + wcex.hIcon = 0; + wcex.hIconSm = 0; + wcex.lpszMenuName = 0; + return RegisterClassExW(&wcex); } HWND hCheckButton; @@ -103,163 +100,164 @@ HWND hRestartButton; BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) { - hInst = hInstance; // Store instance handle in our global variable + hInst = hInstance; // Store instance handle in our global variable - HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, 0, 300, 260, nullptr, nullptr, hInstance, nullptr); + HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, 0, 300, 260, nullptr, nullptr, hInstance, nullptr); - hCheckButton = CreateWindowW(L"BUTTON", L"Check for updates", - WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 40, 50, 200, 40, - hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); + hCheckButton = CreateWindowW(L"BUTTON", L"Check for updates", + WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, + 40, 50, 200, 40, + hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); - hDownloadButton = CreateWindowW(L"BUTTON", L"Download update", - WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 40, 100, 200, 40, - hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); + hDownloadButton = CreateWindowW(L"BUTTON", L"Download update", + WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, + 40, 100, 200, 40, + hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); - hRestartButton = CreateWindowW(L"BUTTON", L"Apply / Restart", - WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 40, 150, 200, 40, - hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); + hRestartButton = CreateWindowW(L"BUTTON", L"Apply / Restart", + WS_TABSTOP | WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, + 40, 150, 200, 40, + hWnd, NULL, (HINSTANCE)GetWindowLongPtr(hWnd, GWLP_HINSTANCE), NULL); - if (!hWnd) - { - return FALSE; - } + if (!hWnd) { + return FALSE; + } - ShowWindow(hWnd, nCmdShow); - UpdateWindow(hWnd); + ShowWindow(hWnd, nCmdShow); + UpdateWindow(hWnd); - return TRUE; + return TRUE; } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - switch (message) - { - case WM_COMMAND: - { - if (LOWORD(wParam) == BN_CLICKED) - { - if ((HWND)lParam == hCheckButton) - { - try { - updInfo = manager.checkForUpdates(); - if (updInfo != nullptr) { - // this is a hack to convert ascii to wide string - auto version = updInfo->targetFullRelease->version; - std::wstring message = L"Update available: " + utf8_to_wstring(version); - MessageBoxCentered(hWnd, message.c_str(), szTitle, MB_OK); - } - else { - MessageBoxCentered(hWnd, L"No updates available.", szTitle, MB_OK); - } - } - catch (std::exception& e) { - std::wstring wideWhat = utf8_to_wstring(e.what()); - MessageBoxCentered(hWnd, wideWhat.c_str(), szTitle, MB_OK | MB_ICONERROR); - } - } - else if ((HWND)lParam == hDownloadButton) - { - if (updInfo != nullptr) { - try { - manager.downloadUpdates(updInfo->targetFullRelease.get()); - downloaded = true; - MessageBoxCentered(hWnd, L"Download completed successfully.", szTitle, MB_OK); - } - catch (std::exception& e) { - std::wstring wideWhat = utf8_to_wstring(e.what()); - MessageBoxCentered(hWnd, wideWhat.c_str(), szTitle, MB_OK | MB_ICONERROR); - } - } - else { - MessageBoxCentered(hWnd, L"Check for updates first.", szTitle, MB_OK); - } - } - else if ((HWND)lParam == hRestartButton) - { - if (!downloaded) { - MessageBoxCentered(hWnd, L"Download an update first.", szTitle, MB_OK); - } - else { - manager.applyUpdatesAndRestart(updInfo->targetFullRelease.get()); - } - } - } - break; - } - case WM_PAINT: - { - PAINTSTRUCT ps; - HDC hdc = BeginPaint(hWnd, &ps); - RECT r{ 0, 5, ps.rcPaint.right, ps.rcPaint.bottom }; - auto ver = utf8_to_wstring(currentVersion); - std::wstring text = L"Welcome to v" + ver + L" of the\nVelopack C++ Sample App."; - DrawText(hdc, text.c_str(), -1, &r, DT_BOTTOM | DT_CENTER); - EndPaint(hWnd, &ps); - break; - } - case WM_DESTROY: - PostQuitMessage(0); - break; - default: - return DefWindowProc(hWnd, message, wParam, lParam); - } - return 0; + switch (message) { + case WM_COMMAND: + { + if (LOWORD(wParam) == BN_CLICKED) { + if (!managerOpt.has_value()) { + break; // this should not happen because we construct UpdateManager in wWinMain + } + auto manager = managerOpt.value(); + + if ((HWND)lParam == hCheckButton) { + try { + updInfo = manager.CheckForUpdates(); + if (updInfo.has_value()) { + std::string version = updInfo.value().TargetFullRelease.Version; + std::wstring message = L"Update available: " + Utf8ToWString(version); + MessageBoxCentered(hWnd, message.c_str(), szTitle, MB_OK); + } + else { + MessageBoxCentered(hWnd, L"No updates available.", szTitle, MB_OK); + } + } + catch (std::exception& e) { + std::wstring what = Utf8ToWString(e.what()); + MessageBoxCentered(hWnd, what.c_str(), szTitle, MB_OK | MB_ICONERROR); + } + } + else if ((HWND)lParam == hDownloadButton) { + if (updInfo.has_value()) { + try { + manager.DownloadUpdates(updInfo.value()); + downloaded = true; + MessageBoxCentered(hWnd, L"Download completed successfully.", szTitle, MB_OK); + } + catch (std::exception& e) { + std::wstring what = Utf8ToWString(e.what()); + MessageBoxCentered(hWnd, what.c_str(), szTitle, MB_OK | MB_ICONERROR); + } + } + else { + MessageBoxCentered(hWnd, L"Check for updates first.", szTitle, MB_OK); + } + } + else if ((HWND)lParam == hRestartButton) { + if (!downloaded) { + MessageBoxCentered(hWnd, L"Download an update first.", szTitle, MB_OK); + } + else { + manager.WaitExitThenApplyUpdate(updInfo.value()); + exit(0); + } + } + } + break; + } + case WM_PAINT: + { + PAINTSTRUCT ps; + HDC hdc = BeginPaint(hWnd, &ps); + RECT r{ 0, 5, ps.rcPaint.right, ps.rcPaint.bottom }; + + std::string currentVersion = "Not Installed"; + if (managerOpt.has_value()) { + currentVersion = managerOpt.value().GetCurrentVersion(); + } + auto ver = Utf8ToWString(currentVersion); + std::wstring text = L"Welcome to v" + ver + L" of the\nVelopack C++ Sample App."; + DrawText(hdc, text.c_str(), -1, &r, DT_BOTTOM | DT_CENTER); + EndPaint(hWnd, &ps); + break; + } + case WM_DESTROY: + PostQuitMessage(0); + break; + default: + return DefWindowProc(hWnd, message, wParam, lParam); + } + return 0; } int MessageBoxCentered(HWND hWnd, LPCTSTR lpText, LPCTSTR lpCaption, UINT uType) { - if (hWnd == nullptr) - { - return MessageBox(hWnd, lpText, lpCaption, uType); - } - else - { - // Center message box at its parent window - static HHOOK hHookCBT{}; - hHookCBT = SetWindowsHookEx(WH_CBT, - [](int nCode, WPARAM wParam, LPARAM lParam) -> LRESULT - { - if (nCode == HCBT_CREATEWND) - { - if (((LPCBT_CREATEWND)lParam)->lpcs->lpszClass == (LPWSTR)(ATOM)32770) // #32770 = dialog box class - { - RECT rcParent{}; - GetWindowRect(((LPCBT_CREATEWND)lParam)->lpcs->hwndParent, &rcParent); - ((LPCBT_CREATEWND)lParam)->lpcs->x = rcParent.left + ((rcParent.right - rcParent.left) - ((LPCBT_CREATEWND)lParam)->lpcs->cx) / 2; - ((LPCBT_CREATEWND)lParam)->lpcs->y = rcParent.top + ((rcParent.bottom - rcParent.top) - ((LPCBT_CREATEWND)lParam)->lpcs->cy) / 2; - } - } + if (hWnd == nullptr) { + return MessageBox(hWnd, lpText, lpCaption, uType); + } + else { + // Center message box at its parent window + static HHOOK hHookCBT{}; + hHookCBT = SetWindowsHookEx(WH_CBT, + [](int nCode, WPARAM wParam, LPARAM lParam) -> LRESULT + { + if (nCode == HCBT_CREATEWND) { + if (((LPCBT_CREATEWND)lParam)->lpcs->lpszClass == (LPWSTR)(ATOM)32770) // #32770 = dialog box class + { + RECT rcParent{}; + GetWindowRect(((LPCBT_CREATEWND)lParam)->lpcs->hwndParent, &rcParent); + ((LPCBT_CREATEWND)lParam)->lpcs->x = rcParent.left + ((rcParent.right - rcParent.left) - ((LPCBT_CREATEWND)lParam)->lpcs->cx) / 2; + ((LPCBT_CREATEWND)lParam)->lpcs->y = rcParent.top + ((rcParent.bottom - rcParent.top) - ((LPCBT_CREATEWND)lParam)->lpcs->cy) / 2; + } + } - return CallNextHookEx(hHookCBT, nCode, wParam, lParam); - }, - 0, GetCurrentThreadId()); + return CallNextHookEx(hHookCBT, nCode, wParam, lParam); + }, + 0, GetCurrentThreadId()); - int iRet{ MessageBox(hWnd, lpText, lpCaption, uType) }; + int iRet{ MessageBox(hWnd, lpText, lpCaption, uType) }; - UnhookWindowsHookEx(hHookCBT); + UnhookWindowsHookEx(hHookCBT); - return iRet; - } + return iRet; + } } -std::string wstring_to_utf8(std::wstring const& wstr) +std::string WStringToUtf8(std::wstring const& wstr) { - if (wstr.empty()) return std::string(); - int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL); - std::string strTo(size_needed, 0); - WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL); - return strTo; + if (wstr.empty()) return std::string(); + int size_needed = WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), NULL, 0, NULL, NULL); + std::string strTo(size_needed, 0); + WideCharToMultiByte(CP_UTF8, 0, &wstr[0], (int)wstr.size(), &strTo[0], size_needed, NULL, NULL); + return strTo; } -std::wstring utf8_to_wstring(std::string const& str) +std::wstring Utf8ToWString(std::string const& str) { - if (str.empty()) return std::wstring(); - int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0); - std::wstring strTo(size_needed, 0); - MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &strTo[0], size_needed); - return strTo; + if (str.empty()) return std::wstring(); + int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0); + std::wstring strTo(size_needed, 0); + MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &strTo[0], size_needed); + return strTo; } \ No newline at end of file diff --git a/samples/CPlusPlusWin32/VeloCppWinSample.sln b/samples/CPlusPlusWin32/VeloCppWinSample.sln index 0f9a0467..ab3e94e2 100644 --- a/samples/CPlusPlusWin32/VeloCppWinSample.sln +++ b/samples/CPlusPlusWin32/VeloCppWinSample.sln @@ -8,19 +8,13 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Debug|x64.ActiveCfg = Debug|x64 {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Debug|x64.Build.0 = Debug|x64 - {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Debug|x86.ActiveCfg = Debug|Win32 - {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Debug|x86.Build.0 = Debug|Win32 {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Release|x64.ActiveCfg = Release|x64 {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Release|x64.Build.0 = Release|x64 - {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Release|x86.ActiveCfg = Release|Win32 - {F9BB1F11-3827-4745-B11B-77FA5DBE1195}.Release|x86.Build.0 = Release|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj b/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj index b75e1044..df3eee03 100644 --- a/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj +++ b/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj @@ -1,14 +1,6 @@ - - Debug - Win32 - - - Release - Win32 - Debug x64 @@ -26,19 +18,6 @@ 10.0 - - Application - true - v143 - Unicode - - - Application - false - v143 - true - Unicode - Application true @@ -57,12 +36,6 @@ - - - - - - @@ -70,38 +43,12 @@ - - - Level3 - true - WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - stdcpp20 - stdc17 - - - Windows - true - - - - - Level3 - true - true - true - WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions) - true - stdcpp20 - stdc17 - - - Windows - true - true - true - - + + $(VC_IncludePath);$(WindowsSDK_IncludePath);../../src/lib-cpp/include + + + $(VC_IncludePath);$(WindowsSDK_IncludePath);../../src/lib-cpp/include + Level3 @@ -114,7 +61,11 @@ Windows true + $(CoreLibraryDependencies);%(AdditionalDependencies);$(SolutionDir)../../target/debug/velopack_libc.dll.lib + + xcopy /y "$(SolutionDir)..\..\target\debug\velopack_libc.dll" "$(OutDir)" + @@ -132,7 +83,11 @@ true true true + $(CoreLibraryDependencies);%(AdditionalDependencies);$(SolutionDir)../../target/release/velopack_libc.dll.lib + + xcopy /y "$(SolutionDir)..\..\target\release\velopack_libc.dll" "$(OutDir)" + diff --git a/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj.filters b/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj.filters index 8ce257ca..24fffd05 100644 --- a/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj.filters +++ b/samples/CPlusPlusWin32/VeloCppWinSample.vcxproj.filters @@ -14,16 +14,10 @@ Source Files - - Source Files - Header Files - - Header Files - \ No newline at end of file diff --git a/src/lib-cpp/include/Velopack.h b/src/lib-cpp/include/Velopack.h index a369dc9b..4698fc6e 100644 --- a/src/lib-cpp/include/Velopack.h +++ b/src/lib-cpp/include/Velopack.h @@ -56,7 +56,7 @@ typedef void (*vpkc_hook_callback_t)(const char* pszAppVersion); typedef enum { UPDATE_AVAILABLE = 0, NO_UPDATE_AVAILABLE = 1, - ERROR = 2, + UPDATE_ERROR = 2, } vpkc_update_check_t; // !! AUTO-GENERATED-START C_TYPES @@ -270,7 +270,7 @@ static inline UpdateOptions to_cpp(const vpkc_update_options_t& dto) { class VelopackApp { private: - VelopackApp(); + VelopackApp() {}; public: static VelopackApp Build() { return VelopackApp(); @@ -380,7 +380,7 @@ public: vpkc_update_info_t update; vpkc_update_check_t result = vpkc_check_for_updates(&m_pManager, &update); switch (result) { - case vpkc_update_check_t::ERROR: + case vpkc_update_check_t::UPDATE_ERROR: throw_last_error(); return std::nullopt; case vpkc_update_check_t::NO_UPDATE_AVAILABLE: @@ -390,14 +390,15 @@ public: vpkc_free_update_info(&update); return cpp_info; } + return std::nullopt; }; - void DownloadUpdates(const UpdateInfo& update, vpkc_progress_callback_t progress) { + void DownloadUpdates(const UpdateInfo& update, vpkc_progress_callback_t progress = nullptr) { vpkc_update_info_t vpkc_update = to_c(update); if (!vpkc_download_updates(&m_pManager, &vpkc_update, progress)) { throw_last_error(); } }; - void WaitExitThenApplyUpdate(const VelopackAsset& asset, bool silent, bool restart, std::vector restartArgs) { + void WaitExitThenApplyUpdate(const VelopackAsset& asset, bool silent = false, bool restart = true, std::vector restartArgs = {}) { char** pRestartArgs = new char*[restartArgs.size()]; for (size_t i = 0; i < restartArgs.size(); i++) { pRestartArgs[i] = new char[restartArgs[i].size() + 1]; @@ -417,7 +418,7 @@ public: throw_last_error(); } }; - void WaitExitThenApplyUpdate(const UpdateInfo& asset, bool silent, bool restart, std::vector restartArgs) { + void WaitExitThenApplyUpdate(const UpdateInfo& asset, bool silent = false, bool restart = true, std::vector restartArgs = {}) { this->WaitExitThenApplyUpdate(asset.TargetFullRelease, silent, restart, restartArgs); }; }; diff --git a/src/lib-cpp/src/bridge.cc b/src/lib-cpp/src/bridge.cc index 8c56f743..d7e6e675 100644 --- a/src/lib-cpp/src/bridge.cc +++ b/src/lib-cpp/src/bridge.cc @@ -287,7 +287,7 @@ VPKC_EXPORT vpkc_update_check_t VPKC_CALL vpkc_check_for_updates(vpkc_update_man } catch (const std::exception& e) { set_last_error(e.what()); - return vpkc_update_check_t::ERROR; + return vpkc_update_check_t::UPDATE_ERROR; } } VPKC_EXPORT bool VPKC_CALL vpkc_download_updates(vpkc_update_manager_t* pManager, vpkc_update_info_t* pUpdate, vpkc_progress_callback_t cbProgress) {