2012-03-25 15 views
1

Was ich tun muss, ist ApplicationData Weg zu bekommen, habe ich in Google gefunden, dass es FunktionWie shell32.dll von C++ Konsolenanwendung verwenden

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

genannt wird, aber es existiert in shell32.dll in C# würde ich so etwas wie

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

tun Was muss ich in C++ Konsolenanwendung tun, in der Lage sein, diese API aufrufen? Vielleicht kann ich LoadLibrary() verwenden? Aber was ist der richtige Weg?

Kann ich diese DLL irgendwie statisch mit meiner EXE verbinden? Ich verwende Visual Studio 2010.

Antwort

7

Sie müssen shlobj.h # einschließen und auf shell32.lib verweisen. Gefällt mir:

#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; 
} 

Der #pragma-Kommentar kümmert sich darum, dem Linker davon zu erzählen.

+0

Vielen Dank !!!!! – StringBuilder

+0

Gibt es einen Grund, warum Sie die #pragma verwendet haben, anstatt sie nur unter Linker-Optionen hinzuzufügen? –

+3

@Jesse, weil es * so * viel einfacher zu erklären ist. Und daran ist nichts falsch. –

3

#include <Shlobj.h> und #pragma comment(lib,"Shell32.lib") sollte funktionieren.