2

我正在尝试SHGetKnownFolderPath()使用 Visual Studio 2008 从 C 调用 Vista 函数。该代码可以作为 C++ 正常工作,但拒绝使用以下输出编译为 C 代码:

xyz\indexwiki.cpp(316) : error C2440: 'function' : cannot convert from 'const GUID' to 'const KNOWNFOLDERID *const ' xyz\indexwiki.cpp(316) : warning C4024: 'SHGetKnownFolderPath' : 不同类型的正式和实际参数1

代码差不多:

PWSTR path;

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

如果可以的话,我更愿意将其保留为 C 并将项目保留为单个源文件。这是较新的 Windows API 的已知问题吗?我通过谷歌找不到太多东西。我错过了什么吗?或者是否有一个涉及强制转换或预处理器定义的简单解决方法?

4

3 回答 3

5

下面的呢?

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

于 2011-04-02T06:59:38.170 回答
1

即使你在 C 中传入一个指针,智能感知仍然会抱怨找不到构造函数。我认为这是一个错误,因为我无法摆脱它。我的解决方案是将文件重命名为 .cpp。

于 2012-04-25T19:17:10.693 回答
0

从错误消息中可以看出,您传递的是一个 const GUID,而 SHGetKnownFolderPath 需要一个 REFKNOWNFOLDERID。尝试使用这个:

HRESULT hr = SHGetKnownFolderPath( (REFKNOWNFOLDERID)FOLDERID_Profile,  0,  NULL,  &path);
于 2011-04-02T06:58:58.577 回答