2012-03-25 2 views
1

Что мне нужно сделать, чтобы получить ApplicationData путь, я нашел в Google, что есть функция называетсяКак использовать 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

Вам необходимо # включить 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

+0

Любая причина, по которой вы использовали #pragma вместо того, чтобы просто добавлять ее в опции компоновщика? –

+3

@ Jesse, потому что * так * намного проще объяснить. И нет ничего плохого в этом. –

3

#include <Shlobj.h> и #pragma comment(lib,"Shell32.lib") должны работать.