ошибка: «SHGetKnownFolderPath» не был объявлен в этой области - PullRequest
0 голосов
/ 08 октября 2019

Я знаю этот вопрос, заданный ранее, мой файл CPP:

#include <shlobj.h>
int main(int argc, char *argv[])
{
    PWSTR pszPath;
    HRESULT hr = SHGetKnownFolderPath(&FOLDERID_Startup,0,NULL,&pszPath);
}

И я использую компилятор Linux Mingw, чтобы скомпилировать его для Windows с помощью этой команды:

i686-w64-mingw32-gcc hub.cpp

или

x86_64-w64-mingw32-g++ hub.cpp

И я получаю:

In function ‘int main(int, char**)’:
error: ‘SHGetKnownFolderPath’ was not declared in this scope
                 &pszPath);
                     ^

Добавление их в заголовок не помогает, и я получаю ту же ошибку:

#define WINVER 0x0600
#include <windows.h>

или

#define WINVER 0x0600
#define _WIN32_WINNT 0x0600

И я изучил shlobj.h и SHGetKnownFolderPath в нем.

Как я могу это исправить?

РЕДАКТИРОВАТЬ :

Изменение, которое мой друг ssbssa предложил в комментариях поставить #define _WIN32_WINNT 0x0600 before #include <shlobj.h>, вызвать новую ошибку и новую заметку:

hub.cpp: In function ‘int main(int, char**)’:
hub.cpp:8:69: error: invalid initialization of reference of type ‘const KNOWNFOLDERID& {aka const _GUID&}’ from expression of type ‘const GUID* {aka const _GUID*}’
  HRESULT hr = SHGetKnownFolderPath(&FOLDERID_Startup,0,NULL,&pszPath);
                                                                     ^
In file included from hub.cpp:2:0:
/usr/share/mingw-w64/include/shlobj.h:755:10: note: in passing argument 1 of ‘HRESULT SHGetKnownFolderPath(const KNOWNFOLDERID&, DWORD, HANDLE, WCHAR**)’
   STDAPI SHGetKnownFolderPath (REFKNOWNFOLDERID rfid, DWORD dwFlags, HANDLE hToken, PWST

Я вижу, что ошибка говорит: «Мне нужен указатель, и я дал ему адрес, но я не знаю, как правильно его объявить».

...