【发布时间】:2018-05-29 02:25:54
【问题描述】:
我正在创建一个 Windows Shell 扩展,以通过制作 COM dll 在资源管理器上下文菜单中添加一些选项,但我遇到了一个奇怪的向量问题。
我正在尝试将包含路径的 std::vector(类成员)的内容附加到 std::wstring 中,但最后,只有一个路径添加到字符串中。我知道这是向量本身的问题,因为如果我用本地向量而不是 m_selectedFiles 替换向量,它就可以工作。
代码如下:
HRESULT FilesEncryptContextMenuHandler::InvokeCommand(CMINVOKECOMMANDINFO *pici) {
wchar_t filename[MAX_PATH] = {0};
GetModuleFileName((HMODULE)g_hInstance, filename, MAX_PATH);
std::wstring str = filename;
std::wstring exe = str.substr(0, str.find_last_of('\\')) + L"\\FilesEncrypt.exe";
std::basic_stringstream<wchar_t> ss;
for (std::vector<std::wstring>::iterator it = m_selectedFiles.begin(); it != m_selectedFiles.end(); ++it) {
MessageBox(NULL, it->c_str(), L"Test", MB_OK);
ss << *it << L" ";
}
std::wstring args = ss.str();
MessageBox(NULL, args.c_str(), L"Test", MB_OK);
args = args.substr(0, args.size() - 1);
ShellExecute(NULL, L"open", exe.c_str(), args.c_str(), NULL, SW_SHOWNA);
return S_OK;
}
这里,for循环中的MessageBox被多次调用,但第二个MessageBox只显示PATH1。由于一个我真的不知道的原因,向量中的其他元素没有附加。
【问题讨论】: