无论什么,SHGetFolderPath都会返回"C"?

Ver*_*sen 2 c windows directory

我对Windows开发相当新(在Mac方面经验丰富),并且我尝试使用SHGetFolderPath(因为它与Windows XP兼容)来获取当前用户的app数据文件夹的路径.然而,无论我传递的是什么旗帜,我每次都会得到一个"C"的输出路径.我试过了两个:

CSIDL_APPDATA

CSIDL_LOCAL_APPDATA

有和没有CSIDL_FLAG_CREATE标志.每次都有相同的结果:"C".我在这做错了什么?

#include <windows.h> 
#include <shlobj.h>     // SHGetFolderPath
#include <stdio.h>
#include <stdlib.h>

//#pragma comment(lib, "shell32.lib") 

int main() 
{  
    CHAR path[MAX_PATH]; 
    HRESULT result = SHGetFolderPath(NULL, CSIDL_APPDATA | CSIDL_FLAG_CREATE, NULL, SHGFP_TYPE_CURRENT, path); 

    if (result != S_OK) 
        printf("Error: %d\n", result); 
    else 
        printf("Path: %s\n" , path); 

    printf( "String length: %d\n", strlen(path) );

    return 0; 
} 
Run Code Online (Sandbox Code Playgroud)

SHGetFolderPath的文档:http://msdn.microsoft.com/en-us/library/windows/desktop/bb762181(v = vs.85) .aspx

Dav*_*nan 8

您正在编译Unicode但传递ANSI缓冲区.您的实际代码有一个您没有向我们展示的演员表.传递wchar_t缓冲区并使用匹配的打印例程,或调用函数的ANSI版本SHGetFolderPathA.