我正在使用
TCHAR缓冲区[MAX_SIZE];
经过一些步骤后,我知道文件夹的相对路径为ex:
C:\ Microsoft.NET \框架\ v1.0.037 \
由于上面的路径是在TCHAR类型的缓冲区中,我正在尝试连接“RegAsm.exe”
追加后我需要将路径转换为LPCTSTR,因为我需要将其传递给 CreateProcess(),它将LPCTSTR类型作为参数
然后编译器给出了错误。我尝试过但很烦恼。
任何人都可以在这方面帮助我......
答案 0 :(得分:2)
_tcscat_s
是TCHAR的相关方法。它取决于_UNICODE&上的TCHAR。 _MBCS预处理器swithch将被解析为strcat_s或wcscat_s。
TCHAR buffer[MAX_SIZE] = _T("c:\Microsoft.NET\Framework\v1.0.037\");
_tcscat_s(buffer, MAX_SIZE, _T("RegAsm.exe"));
但这是非常好的旧C风格。因此,当您使用TCHAR时,我会建议 你也使用MFC的东西。因此使用CString也会受到_UNICODE& _MBCS也可以解决您的问题。
CString buffer;
buffer = _T("c:\Microsoft.NET\Framework\v1.0.037\");
buffer += _T("RegAsm.exe");
CreateProcess(buffer, ..
std :: string或std :: wstring无济于事,因为它们不会改变与切换预处理器相关的行为,但如果使用CreateProcessA或CreateProcessW,也可以使用std :: string或std :: wstring。
答案 1 :(得分:1)
问题是TCHAR和CreateProcess是根据您是否为Unicode编译而不同扩展的宏。需要注意的是,GetCORSystemDirectory()只接受Unicode缓冲区。要摆脱这些ANSI / Unicode问题,请为Unicode明确编写此代码部分。
而不是TCHAR使用WCHAR作为缓冲区。而不是CreateProcess()使用CreateProcessW() - 它将很乐意接受Unicode缓冲区。使用wcscat()进行字符串连接。
这样的事情(省略错误处理):
WCHAR buffer[MAX_PATH + 1];
DWORD realLength;
GetCORSystemDirectory( buffer, MAX_PATH, &realLength );
*( buffer + realLength ) = 0;// Don't forget to null-terminate the string
wcscat( buffer, L"regasm.exe" );
CreateProcessW( /*pass buffer here*/ );
答案 2 :(得分:0)
如果你想让你的生活更轻松我总是建议使用std :: string,那么当调用CreateProcess()函数时,只需:
std::string myPath = "somePath";
LPCTSTR lpBuf = reinterpret_cast<LPCTSTR>(myPath.c_str());
没有经过测试,但这应该可行,如果您仍然收到错误,那么发布代码将非常有用。
请注意,如果使用Unicode,可能会更复杂。
答案 3 :(得分:0)
我假设你得到一个错误,你正在使用Unicode ...在这种情况下你可能想看看 mbstowcs 和 wcstombs 功能
确实需要更多信息才能正确回答。
答案 4 :(得分:0)