Программа добавляет L к имени переменной, используя тип TCHAR и макрос TEXT
Я пытаюсь найти путь к программным файлам, добавить еще один путь и запустить его.
TCHAR programsdir[MAX_PATH];
SHGetFolderPath(NULL,CSIDL_PROGRAM_FILESX86,NULL,NULL,programsdir);
PathAppend(programsdir, TEXT("\\bin\\program.exe"));
LPCSTR pokerpath = TEXT(programsdir);
WinExec(pokerpath ,SW_SHOW);
return pokerpath;
Получение этого сообщения об ошибке при попытке запустить выше:
error C2065: 'Lprogramsdir' : undeclared identifier
2 ответа
TEXT
это макрос, который должен быть L
когда вы компилируете с Unicode и ничего другого.
Так что в вашем случае, TEXT(programsdir)
становится Lprogramsdir
, Вот почему у вас есть эта ошибка.
Когда вы используете строки Unicode, вы должны префикс их объявления с L
как в L"My string content"
Письменно TEXT("My string content")
, вы гарантируете, что при использовании Unicode он станет L"My string content" и "My string content". Этот макрос позволяет использовать другую кодировку без необходимости изменять исходные строки.
Он не используется для копирования или приведения, если это то, что вы пытаетесь сделать.
TCHAR
это typedef
за char
,
LPCSTR
это typedef
за const char *
,
Там нет необходимости называть TEXT
макрос (который добавляет L
на имя вашей переменной, по-видимому, в @olchauvin).
Вы должны использовать strcpy(pokerpath, programsdir);
или просто вернуться programsdir
, Это распадется на char *
в любом случае.
Я не знаю, используете ли вы UNICODE, поэтому вам может понадобиться использовать одну из специальных функций UNICODE для копирования строк. В противном случае просто верните его.