VS10,MBCS,Unicode预处理器defs。 通过谷歌博士的案例手册,最好的帮助是here,但它并没有完全解决这个特殊问题。请考虑以下代码,其中thisexePath是可执行文件的路径:
cmdLineArg = (wchar_t *)calloc(BIGGERTHANMAXPATH, sizeof(wchar_t));
wcscpy_s (cmdLineArg, maxPathFolder, L"\\\\??\\C:\\My directory\\My directory\\");
CreateProcessW (thisexePath, cmdLineArg, NULL, NULL, FALSE, NULL, NULL, NULL, &lpStartupInfo, &lpProcessInfo)
当程序被调用时
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int nCmdShow)
{
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext), L"%ls", lpCmdLine);
//deal with possible buffer overflow later
MessageBoxW(NULL, hrtext, L"Display", MB_ICONINFORMATION);
}
hrtext只显示“我的目录\我的目录”,这里明显错过了什么?
答案 0 :(得分:0)
这是不正确的:
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext), L"%ls", lpCmdLine);
第二个参数应表示字符数,而不是字节数。
应该是这样的:
wchar_t hrtext[256];
swprintf_s(hrtext, sizeof(hrtext) / sizeof(wchar_t), L"%ls", lpCmdLine);
或简单地说:
wchar_t hrtext[256];
swprintf_s(hrtext, 256, L"%ls", lpCmdLine);