如何在C ++控制台应用程序中使用shell32.dll

时间:2012-03-25 20:18:48

标签: c++ linker static-linking

我需要做的是获得ApplicationData路径,我在Google中发现有一个名为

的功能
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 ++ Console应用程序中我需要做什么才能调用此API? 也许,我可以使用LoadLibrary()? 但是这样做的正确方法是什么?

我可以以某种方式静态链接此dll作为我的exe的一部分吗? 我正在使用Visual Studio 2010。

2 个答案:

答案 0 :(得分:8)

您需要#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注释负责告诉链接器。

答案 1 :(得分:3)

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