从C代码调用SHGetKnownFolderPath

时间:2011-04-02 06:41:59

标签: c winapi windows-7 windows-vista known-folders

我正在尝试使用Visual Studio 2008从C调用Vista函数SHGetKnownFolderPath()。该代码可以正常使用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,这是一个已知问题吗?我通过谷歌找不到多少。我错过了什么吗?或者是否有一个简单的解决方法涉及强制转换或预处理器定义?

3 个答案:

答案 0 :(得分:5)

以下情况如何?

  

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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