【问题标题】:IShellFolder::ParseDisplayName Complilation Error in QTQT 中的 IShellFolder::ParseDisplayName 编译错误
【发布时间】:2012-03-26 20:23:16
【问题描述】:

如果我使用 Visual Studio 2010,以下代码可以正常工作:

IShellFolder *psfParent = NULL;
LPITEMIDLIST pidlSystem = NULL;
HRESULT hr;
QString sPath = "C:\\Users\\guest\\Desktop\\kannden"; // for QT
//wchar_t * path = "C:\\Users\\guest\\Desktop\\kannden"; for windows

hr = SHGetDesktopFolder(&psfParent);

if (SUCCEEDED(hr)) 
{
hr =psfParent->ParseDisplayName(NULL,NULL, path,0, &pidlSystem,NULL);
SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_IDLIST, pidlSystem, 0);
}

但如果我在 QT 4.7 中运行代码,我会收到错误消息:

没有匹配函数调用“IShellFolder::ParseDispalyName(NULL, NULL, QString*,int,ITEMIDLIST**,NULL)

【问题讨论】:

    标签: c++ qt


    【解决方案1】:

    当(我相信)ParseDisplayName 需要一个指向 wchar_t 的指针时,您正在传递一个指向 QString 的指针。试试:

    hr = psfParent->ParseDisplayName(NULL,NULL, &QString::toWCharArray(sPath),0, &pidlSystem,NULL);
    

    【讨论】:

    • 我试过你的代码,它给出了编译错误,我做了一些改变,它工作了。 hr =psfParent->ParseDisplayName(NULL,NULL, (LPOLESTR)path.utf16(),0, &pidlSystem,NULL);感谢您的帮助
    • 对不起,我忘记了一个'&',这可能导致你的编译错误...我更新答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多