Как использовать shell32.dll из консольного приложения C ++ - PullRequest
1 голос
/ 26 марта 2012

Что мне нужно сделать, это получить 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 ++, чтобы иметь возможность вызывать этот API?Может быть, я могу использовать LoadLibrary()?Но как правильно это сделать?

Могу ли я как-то статически связать эту dll, чтобы она была частью моего exe?Я использую Visual Studio 2010.

Ответы [ 2 ]

8 голосов
/ 26 марта 2012

Вам необходимо #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 заботится о том, чтобы сообщить об этом компоновщику.

3 голосов
/ 26 марта 2012

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

...