Как # определить жестко закодированные строки, когда используется префикс L (компилятор Visual C ++)? - PullRequest
1 голос
/ 14 марта 2012

Как # определить путь L "C: \ Windows \ System32 \ taskmgr.exe" для обработки широких символов

#define TASK_MGR "C:\\Windows\\System32\\taskmgr.exe"

KillProcess(TASK_MGR); //this works

HINSTANCE resurrect = ShellExecute(NULL, L"open", L"C:\\Windows\\System32\\taskmgr.exe", NULL, NULL, SW_MINIMIZE); 

Ответы [ 3 ]

4 голосов
/ 14 марта 2012

Вам нужно использовать несколько макросов. К счастью, заголовки Windows уже определяют такой макрос, который при необходимости расширяет строковый литерал, TEXT(), поэтому нет веской причины писать свой собственный.

Следующий код работает нормально:

#define TASK_MGR "C:\\Windows\\System32\\taskmgr.exe"

KillProcess(TASK_MGR);  // Not sure what KillProcess is or why it takes a narrow
                        // string, regardless of whether Unicode is defined...
                        // The Win32 function is named TerminateProcess.

HINSTANCE resurrect = ShellExecute(NULL, L"open", TEXT(TASK_MGR), NULL, NULL,
                                   SW_MINIMIZE); 

... хорошо, за исключением того факта, что вы жестко запрограммировали путь к диспетчеру задач, и он не будет найден в этом месте на всех машинах (например, на моем). Но я верю, что это только в качестве примера, и вы уже хорошо знаете, не жесткие пути.

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

Вы можете использовать конкатенацию строк:

#define TASK_MGR "C:\\Windows\\System32\\taskmgr.exe"

/* ... */

HINSTANCE resurrect = ShellExecute(NULL, L"open", L"" TASK_MGR, NULL, NULL, SW_MINIMIZE);

Лично я бы пошел с

static TCHAR const TASK_MGR[] = _T("C:\\Windows\\System32\\taskmgr.exe");

Обычная разглагольствование на жестко заданных путевых именах также применимо.

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

Какую версию Visual C ++ вы используете? Это работает на Visual Studio 2008:

#define PATH L"C:\\Windows\\System32\\taskmgr.exe";
void func()
{
    const wchar_t *test = PATH;
}

Если, как прокомментировал Xeo, вы хотите расширить массив символов, используйте MultiByteToWideChar .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...