2017-12-14 72 views
0

Windows 셸 확장을 작성하여 COM dll을 작성하여 탐색기 컨텍스트 메뉴에 옵션을 추가했지만 벡터에 이상한 문제가 발생합니다.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; 
} 

, 경로하지만 제 메시지 박스 만 PATH1를 도시와 루프라고 여러 번 메시지 박스. 내가 정말로 모른다는 이유로 벡터의 다른 요소가 추가되지 않습니다.

답변

0

그건 줄 이유는 SS < < *이 < < L "";

스트림에 NUL을 배치하면 메시지 상자가 중지됩니다. 스트림에 begin -> end -> 1을 복사해야합니다.

+0

테스트 환경에서 로컬 벡터와 동일하게 작동했지만 문자열에는 NULL 문자가 포함되어 있지 않습니다. –

+0

Ok 나는 ss.write (it-> c_str(), it-> size() - 1);를 수행했다. 그것은 작동하지만 다른 프로그램에서 왜 작동하는지 알려주지 않습니다. –