2012-07-11 7 views
-3

Program Files 경로를 가져오고, 경로의 다른 비트를 추가 한 다음 실행하려고합니다.프로그램은 TCHAR 타입과 TEXT 매크로를 사용하여 변수 이름에 L을 덧붙입니다.

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

+0

왜 downvotes? –

+0

그 세 단계 중 어느 단계에서 문제가 있습니까? 어떤 라인이 오류의 원인입니까? 최소한의 예제를 만들려고 했습니까? 이 질문을 작성하는 데 얼마나 걸렸습니까? – Beta

+0

또한 이것이 컴파일 또는 런타임 오류인지 언급합니다. –

답변

2

TEXT는 달리 유니 코드와 아무것도 컴파일 할 때 L을해야 매크로입니다.

따라서 귀하의 경우 TEXT(programsdir)Lprogramsdir이됩니다. 그래서이 오류가 발생했습니다. 유니 코드와 "내 문자열의 컨텐츠를 사용할 때 유니 코드 문자열을 사용하는 경우

, 당신은 TEXT("My string content")를 작성하여 L"My string content"

에서 같은 L과의 선언을 접두사해야, 당신은 L"내 문자열 내용을 "이 될 수 있도록 "그렇지 않으면. 이 매크로를 사용하면 원시 문자열을 수정하지 않고도 다른 인코딩을 사용할 수 있습니다.

복사 또는 전송에 사용되지 않습니다. 사용자가 시도하려는 곳이면 복사 할 필요가 없습니다.

+0

LPCSTR pokerpath = TEXT (programsdir);'새로운 객체가 생성되고 있다면, 어떻게 풀릴 것인가? 그렇지 않다면 포인터는 무엇을 가리키고 있습니까? –

+0

@DavidSchwartz : LPCSTR은'const char *'에 대한 typedef입니다. –

+0

@ 0A0D : 좋습니다. 그래서 그 선은 무엇을해야 했습니까? 그 행 뒤에'pokerpath '가 가리키고 있었던 것은 무엇입니까? 새로 생성 된 객체? 기존 개체? 또는 무엇을? OP가 문자열을 할당했다고 생각 했습니까? 영업 담당자가'programsdir'의 내용을 변경했다고 생각 했습니까? 또는 그들을 복사? 또는 무엇을? –

0

TCHARchar에 대해 typedef입니다.

LPCSTRconst char *에 대해 typedef입니다.

TEXT 매크로를 호출 할 필요가 없습니다.이 매크로는 @olchauvin 당 변수 이름에 L을 추가합니다.

당신은 strcpy(pokerpath, programsdir);

를 사용하거나 programsdir를 반환해야합니다. 어쨌든 char *으로 사라집니다.

UNICODE를 사용하고 있는지 확실하지 않으므로 특수 UNICODE 함수 중 하나를 사용하여 문자열을 복사해야 할 수도 있습니다. 그렇지 않으면 그냥 반환하십시오.