2012-03-25 173 views
1

我需要做的是让ApplicationData路径,我在谷歌已经发现,有函数调用如何使用shell32.dll中从C++控制台应用程序

HRESULT SHGetFolderPath(
    __in HWND hwndOwner, 
    __in int nFolder, 
    __in HANDLE hToken, 
    __in DWORD dwFlags, 
    __out LPTSTR pszPath 
); 

但在SHELL32.DLL 存在在C#中我会做这样的事情

[DllImport] 
static extern HRESULT SHGetFolderPath() and so on. 

我需要什么,在C++控制台应用程序做,才能够调用这个API? 也许,我可以用LoadLibrary()? 但是,这样做的正确方法是什么?

我可以以某种方式静态链接此DLL以成为我的exe文件的一部分吗? 我正在使用Visual Studio 2010.

回答

7

您需要#include shlobj.h并链接到shell32.lib。像这样:

#include "stdafx.h" 
#include <windows.h> 
#include <shlobj.h> 
#include <assert.h> 
#pragma comment(lib, "shell32.lib") 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    TCHAR path[MAX_PATH]; 
    HRESULT hr = SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, path); 
    assert(SUCCEEDED(hr)); 
    // etc.. 
    return 0; 
} 

#pragma注释负责告诉链接器它。

+0

非常感谢!!!!! – StringBuilder 2012-03-25 20:34:49

+0

你为什么使用#pragma而不是在链接器选项下添加它? – 2012-03-25 20:41:23

+3

@Jesse,因为它很容易解释。它没有什么问题。 – 2012-03-25 20:44:34

3

#include <Shlobj.h>#pragma comment(lib,"Shell32.lib")应该工作。