我正在尝试使用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,这是一个已知问题吗?我通过谷歌找不到多少。我错过了什么吗?或者是否有一个简单的解决方法涉及强制转换或预处理器定义?
答案 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);