IShellFolder * psfDesktop = NULL;
SHGetDesktopFolder (&psfDesktop); // needed to obtain full qualified pidl
LPITEMIDLIST pidl = NULL;
#ifndef _UNICODE
OLECHAR * olePath = NULL;
olePath = (OLECHAR *) calloc (strArray.GetAt (0).GetLength () + 1, sizeof (OLECHAR)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (char*)strArray.GetAt (0).GetBuffer(0), -1, olePath, strArray.GetAt (0).GetLength () + 1);
psfDesktop->ParseDisplayName (NULL, 0, olePath, NULL, &pidl, NULL); free (olePath);
#else
psfDesktop->ParseDisplayName (NULL, 0, strArray.GetAt (0).GetBuffer(0), NULL, &pidl, NULL);
#endif
上面这段代码根据是否UNICODE做了处理,但是,在非UNICODE下,运行正确,但是在unicode下,也就是在下面的else里面,ParseDisplayName后,pidl始终为空。(strArray为CStringArray类型)。
哪位兄弟知道问题在哪呢??
SHGetDesktopFolder (&psfDesktop); // needed to obtain full qualified pidl
LPITEMIDLIST pidl = NULL;
#ifndef _UNICODE
OLECHAR * olePath = NULL;
olePath = (OLECHAR *) calloc (strArray.GetAt (0).GetLength () + 1, sizeof (OLECHAR)); MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, (char*)strArray.GetAt (0).GetBuffer(0), -1, olePath, strArray.GetAt (0).GetLength () + 1);
psfDesktop->ParseDisplayName (NULL, 0, olePath, NULL, &pidl, NULL); free (olePath);
#else
psfDesktop->ParseDisplayName (NULL, 0, strArray.GetAt (0).GetBuffer(0), NULL, &pidl, NULL);
#endif
上面这段代码根据是否UNICODE做了处理,但是,在非UNICODE下,运行正确,但是在unicode下,也就是在下面的else里面,ParseDisplayName后,pidl始终为空。(strArray为CStringArray类型)。
哪位兄弟知道问题在哪呢??
解决方案 »
- 微软官网下载的Windows SDK,兼容老版本Windows不?
- 我的VC6.0编译环境没法生成ActiveX控件
- 在框架窗口的标题栏的指定位置写标题
- 数值转换字符串,请高手帮解决一下
- 这个能实现么:程序打开资源管理器,并且选中一个指定的文件
- 遇到这样的情况,如果是你会不会去上班?
- ftp API 下载文件显示下载进度,用什么方法可以实现
- 请问?BindToRecordset()怎么老报错!
- 以前发的帖子打不开了,有人能帮忙吗!!!
- 关于往工具栏中添加组合框后,遇到的难题,难难难!!!
- 100分求教如何看到编译后被宏替换的代码?
- ★★★★★【在线等】关于动态调用控件中的方法问题【在线等】★★★★★
strArray[0].ReleaseBuffer();
你可以设一个断点看看strArray.GetAt (0)的值(当然了,要转换为char来看).
郁闷也