You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LPCWSTR末尾追加DWORD以作为CreateProcess命令行参数?

解决方法:将DWORD追加到宽字符串末尾作为CreateProcess命令行参数

直接强制转换DWORD为wchar_t*是错误的——这会把数值当作内存地址去读取,属于非法访问,必然导致错误。正确的思路是先把DWORD转换成宽字符串,再拼接目标字符串。

方法1:使用C标准库函数(C风格)

  1. 先将DWORD格式化为宽字符串缓冲区
  2. 再用安全字符串函数拼接

示例代码:

// 假设目标命令行缓冲区足够大(根据实际需求调整大小)
wchar_t command_line[256] = L"target.exe ";
DWORD id = 0x1234; // 示例DWORD值

// 定义缓冲区存储转换后的ID字符串(DWORD最大十进制是10位,十六进制是8位,20足够)
wchar_t id_str[20];
// 将DWORD转为十进制宽字符串,若要十六进制则用L"%x"
_swprintf_s(id_str, _countof(id_str), L"%lu", id);

// 安全拼接字符串,确保目标缓冲区大小足够
wcsncat_s(command_line, _countof(command_line), id_str, wcslen(id_str));

// 之后将command_line传入CreateProcessW
CreateProcessW(NULL, command_line, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

方法2:使用C++ std::wstring(更安全简洁)

用C++的宽字符串类可以自动管理内存,避免手动计算缓冲区大小:

#include <string>

std::wstring cmd_line = L"target.exe ";
DWORD id = 12345;

// 直接将DWORD转为wstring并追加
cmd_line += std::to_wstring(id);

// CreateProcessW的第二个参数需要可写的缓冲区,因此传&cmd_line[0]而非c_str()
STARTUPINFOW si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessW(NULL, &cmd_line[0], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);

注意:CreateProcessW的第二个参数(命令行)要求是可修改的字符串,因此用std::wstring时不要直接传c_str()(返回const指针),而是传&cmd_line[0]确保可写。

内容的提问来源于stack exchange,提问作者DesdreMBM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 17:28:11