在下面的代码我得到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;
}
答案 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::string
是typedef
的{{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 *版本。