Use proper type to represent a path

This commit is contained in:
Chocobo1 2022-03-23 15:20:05 +08:00
parent bf8d993743
commit 8a708fd97e
No known key found for this signature in database
GPG Key ID: 210D9C873253A68C
2 changed files with 8 additions and 17 deletions

View File

@ -61,7 +61,6 @@
#include <QDBusInterface>
#endif
#include "base/path.h"
#include "base/types.h"
#include "base/unicodestrings.h"
#include "base/utils/fs.h"
@ -510,13 +509,13 @@ QString Utils::Misc::zlibVersionString()
}
#ifdef Q_OS_WIN
QString Utils::Misc::windowsSystemPath()
Path Utils::Misc::windowsSystemPath()
{
static const QString path = []() -> QString
static const Path path = []() -> Path
{
WCHAR systemPath[MAX_PATH] = {0};
GetSystemDirectoryW(systemPath, sizeof(systemPath) / sizeof(WCHAR));
return QString::fromWCharArray(systemPath);
return Path(QString::fromWCharArray(systemPath));
}();
return path;
}

View File

@ -37,7 +37,7 @@
#include <QString>
#include "base/pathfwd.h"
#include "base/path.h"
enum class ShutdownDialogAction;
@ -87,22 +87,14 @@ namespace Utils::Misc
QString getUserIDString();
#ifdef Q_OS_WIN
QString windowsSystemPath();
Path windowsSystemPath();
template <typename T>
T loadWinAPI(const QString &source, const char *funcName)
{
QString path = windowsSystemPath();
if (!path.endsWith(u'\\'))
path += u'\\';
path += source;
auto pathWchar = std::make_unique<wchar_t[]>(path.length() + 1);
path.toWCharArray(pathWchar.get());
return reinterpret_cast<T>(
::GetProcAddress(::LoadLibraryW(pathWchar.get()), funcName));
const QString path = (windowsSystemPath() / Path(source)).toString();
return reinterpret_cast<T>(::GetProcAddress(::LoadLibraryW(
path.toStdWString().c_str()), funcName));
}
#endif // Q_OS_WIN
}