Я пытаюсь написать функцию, чтобы получить Windows-эквивалент HOME.Мои навыки C ржавые, поэтому не против того, что мой пример кода не компилируется.Я пытаюсь использовать SHGetKnownFolderPath в Windows Vista и более поздних версиях и SHGetFolderPath в Server 2003 и более ранних версиях.Поскольку я ожидаю встретить пользователей, работающих под управлением Windows XP (поскольку это все еще развернутая версия Windows номер один), я избегу ссылки на SHGetKnownFolderPath в таблице символов (поскольку это приведет к двоичному файлу, который даже не будетзагрузить на XP).Я знаю LoadLibrary () shell32 и GetProcAddress () оттуда, но мои навыки работы с указателями на функции, ну, по меньшей мере, дерьмо, если не сказать больше.
Когда я пишу функции, которые трудно обрабатывать, я выделяю их в отдельный файл примера.На мой взгляд, сломанный пример:
#include <windows.h>
#include <stdio.h>
// Pointerizing this Vista-and-later call for XP/2000 compat, etc.
typedef HRESULT (WINAPI* lpSHGetKnownFolderPath)(
REFKNOWNFOLDERID rfid,
DWORD dwFlags,
HANDLE hToken,
PWSTR *ppszPath
) lpSHGetKnownFolderPath;
int main(int argc, char *argv[])
{
// SHGet(Known)FolderPath() method.
HMODULE hndl_shell32;
lpSHGetKnownFolderPath pSHGetKnownFolderPath;
hndl_shell32 = LoadLibrary("shell32");
pSHGetKnownFolderPath = GetProcAddress(hndl_shell32, "SHGetKnownFolderPathW");
if(pSHGetKnownFolderPath != NULL) {
} else {
}
}
Мой вопрос такой: зная, что я поступаю неправильно, как бы я поступил так?И объяснение того, как сделать это правильно в будущем, будет оценено.Спасибо.