[英]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.