如何将wchar值存储在双引号字符串中

时间:2009-08-21 13:27:27

标签: c++ c

在下面的代码我得到c:\ windows \ Microsoft.Net \ Framework \ v2.0.057到buffer.Now我想把上面的值存储在doble引号“c:\ windows \ Microsoft .Net \ Framework \ v2.0.057“我想传递这个过程。如何用双引号创建此路径....

  HINSTANCE hDLL = LoadLibrary(TEXT("mscoree.dll"));
  FNPTR_GET_COR_SYS_DIR   GetCORSystemDirectory = NULL;
GetCORSystemDirectory = (FNPTR_GET_COR_SYS_DIR) GetProcAddress   (hDLL,"GetCORSystemDirectory"); 
if(GetCORSystemDirectory!=NULL)
          {      
             WCHAR buffer[MAX_PATH + 1];
             DWORD length; 
             HRESULT hr = GetCORSystemDirectory(buffer,MAX_PATH,&length);
             std::string tbuf="\"buffer\"";
             // std::string tbuf=" \""+(string)buffer+"\\InMageSQL.dll\" /codebase /tlb /silent";

             if(S_OK==hr)
             {
                wcscat( buffer,L"RegAsm.exe" );
                STARTUPINFO si;
                PROCESS_INFORMATION pi;
                ZeroMemory( &si, sizeof(si) );
                si.cb = sizeof(si);
                ZeroMemory( &pi, sizeof(pi) );  //(LPSTR)getcurrentpath.c_str()
                if(!CreateProcess((LPCTSTR)buffer,(LPTSTR)strInMageSqlDll.c_str(),NULL, NULL,FALSE, 0,NULL,NULL,&si,&pi ) )
                {
                  cout<<"CreateProcess failed "<<GetLastError()<<endl;
                }

3 个答案:

答案 0 :(得分:1)

我在这里走出困境,因为近年来我没有使用过很多Windows API而且我从未使用过WCHAR

首先,您可以稍微加宽缓冲区并将引号直接戳入其中:

WCHAR buffer[MAX_PATH + 1 + 2];
buffer[0] = L'"';
buffer[sizeof(buffer)/sizeof(WCHAR)-1] = L'"';
DWORD length; 
HRESULT hr = GetCORSystemDirectory(buffer,MAX_PATH+1,&length);

然而,这看起来似乎不够优雅。 (而且我需要三思而后行,sizeof(buffer)/sizeof(WCHAR)-1是否正确 - 我太懒了。)

另一种方法是使用std::basic_string<>模板。请注意,std::stringtypedef的{​​{1}}。几乎没有阻止你将其实例化为其他字符类型:

std::basic_string<char>

请注意,这假设WCHAR buffer[MAX_PATH + 1]; DWORD length; HRESULT hr = GetCORSystemDirectory(buffer,MAX_PATH,&length); std::basic_string<WCHAR> tbuf= L"\"" + buffer + L"\""; // use 'tbuf.c_str()' to read 'tbuf' as a C-string (there's no safe way to write to it) 扩展为WCHAR。如果不是这种情况(我从来没有使用它,所以我不知道),你必须施展文字:

wchar_t

答案 1 :(得分:-1)

尝试以下

std::wstring tbuf="\"";
tbuf+= buffer;
tbuf+= "\"";

答案 2 :(得分:-1)

JaredPar的方法有效,这里有一个选择:

std::wostringstream oss
oss << '"' << buffer << '"';
std::wstring strBuff(oss.str());

修改

切换到w *版本。