2012-03-25 177 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")應該工作。

相關問題