繁体   English   中英

使用L前缀(Visual C ++编译器)时,如何#define硬编码字符串?

[英]How to #define hard coded strings when L prefix (Visual C++ compiler) is used?

如何#define路径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); 

您需要使用多个宏。 幸运的是,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); 

...好吧,除了您硬编码到“任务管理器”的路径,而且不会在所有计算机上的那个位置(例如,我的)上都找不到该路径。 但是我相信这只是出于示例目的,您已经知道不要对路径进行硬编码。

您正在使用哪个版本的Visual C ++? 这适用于Visual Studio 2008:

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

如Xeo所述,如果您想扩展char数组,请使用MultiByteToWideChar

您可以使用字符串串联:

#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");

硬编码的路径名通常也适用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM