Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert a string to LPTSTR

I need to create a variable to use in the CreateProcess:

CreateProcess(z7Cmdline, z7Arg, NULL, NULL, FALSE, NULL, NULL, NULL, &startInfo, &processInfo);

The variable z7Arg is a argument list for 7 -zip which contains a file name based on the current date ie: 2017-12-13.zip.

string buArg = "-o""c:\\moshe"" a " + buDir + buFileName + "c:\\moshe\\*.pdf";

I want to copy buArg into z7Arg as a LPTSTR to use in the CreateProcess routine

How do I go about it?

I am new at coding in C++, 30 years ago I programed in IBM Fortran & Assembly language for Grumman Aerospace, but have done little coding since then.

like image 634
MosheMaurice Avatar asked Dec 24 '22 11:12

MosheMaurice


1 Answers

You have to do 2 things:

  1. Convert const char* to const TCHAR*, where TCHAR may be either char or wchar_t depending on whether Unicode is enabled for your project.
  2. Remove const because CreateProcess requires TCHAR*, not const TCHAR*. You can't just use const_cast, you need a writable buffer that you'll pass to CreateProcess.

For that you may use convenient string conversion macros from ATL or MFC. Use it the following way:

CA2T param(buArg.c_str());
CreateProcess(..., param, ...);

or just

CreateProcess(..., CA2T(buArg.c_str()), ...);

Read more about string conversion macros here.

If you don't have access to ATL or MFC in your project and you have Unicode enabled, you'll need to manually convert char* to wchar_t* using MultibyteToWideChar.

like image 182
Paul Avatar answered Dec 31 '22 14:12

Paul