Вызов SHGetKnownFolderPath из кода C - PullRequest
2 голосов
/ 02 апреля 2011

Я пытаюсь вызвать функцию Vista SHGetKnownFolderPath() из C с использованием Visual Studio 2008. Код отлично работает как C ++, но отказывается компилировать как код C с таким выводом:

xyz \ indexwiki.cpp (316): ошибка C2440: 'функция': не может конвертировать из от const GUID до const KNOWNFOLDERID * const 'xyz \ indexwiki.cpp (316): предупреждение C4024:' SHGetKnownFolderPath ' : разные типы для формальных и фактический параметр 1

Код в значительной степени:

PWSTR path;

HRESULT hr = SHGetKnownFolderPath(
  FOLDERID_Profile,
  0,
  NULL,
  &path
);

Я бы предпочел сохранить его как C и сохранить проект как единый исходный файл, если смогу. Это известная проблема с более новыми Windows API? Я не мог найти много через Google. Я что-то пропустил? Или, может быть, существует простой обходной путь, включающий приведение или определение препроцессора?

Ответы [ 3 ]

5 голосов
/ 02 апреля 2011

Как насчет следующего?

HRESULT hr = SHGetKnownFolderPath (& FOLDERID_Profile, 0, NULL, & path);

1 голос
/ 25 апреля 2012

Даже если вы передадите указатель в C, intellisense все равно будет жаловаться на отсутствие конструктора. Я думаю, что это ошибка, потому что я не смог от нее избавиться. Мое решение было просто переименовать файл в .cpp.

0 голосов
/ 02 апреля 2011

Как видно из сообщения об ошибке, вы передаете const GUID, в то время как SHGetKnownFolderPath хочет REFKNOWNFOLDERID. Попробуйте использовать это:

HRESULT hr = SHGetKnownFolderPath( (REFKNOWNFOLDERID)FOLDERID_Profile,  0,  NULL,  &path);
...