|
예성곤 님이 쓰신 글 :
: 지금 XE4/XE7을 각각 사용 중입니다.
: (Windows 10 64비트 : XE4,,, Windows 7 32비트 : XE7)
:
: 그런데 간단한 코드 컴파일 오류가 나는데 그 차이는 ShellExecute 와 ShellExecuteA 뿐 입니다.
:
: AnsiString TempBMPFName=ChangeFileExt(ParamStr(0),".bmp");
: Image1->Picture->SaveToFile(TempBMPFName);
: ShellExecute(NULL, "print", TempBMPFName.c_str(), NULL, NULL, SW_HIDE);
:
: >>>>> [bcc32 Error] MainUnit.cpp(402): E2034 Cannot convert 'char const[6]' to 'const wchar_t *' 오류 발생
:
: 그런데
: ShellExecuteA(NULL, "print", TempBMPFName.c_str(), NULL, NULL, SW_HIDE); 에서는 정상 컴파일 됩니다.
:
: 무슨 차이일까요?
: ShellExecuteA 이외는 모두 오류가 납니다.
:
: 아래 코드도 동일한 오류 발생합니다.
:
: SHELLEXECUTEINFO ExVal;
:
: ExVal.cbSize = sizeof(SHELLEXECUTEINFO);
: ExVal.fMask = NULL;
: ExVal.hwnd = NULL;
: ExVal.lpVerb = NULL;
: ExVal.lpFile = "NATEON40.exe";
: ExVal.lpParameters = NULL;
: ExVal.lpDirectory = NULL; //"C:\\";
: ExVal.nShow = SW_SHOWNORMAL;
: ExVal.hInstApp = NULL;
:
: ShellExecuteEx(&ExVal);
:
:
: 유니코드 안시코드 참 모르겠습니다.
:
:
:
윈도우즈 API 중에서 문자열을 인수로 받는 API는 MBCS와 유니코드 두가지가 있고, XE 툴은 기본적으로 유니코드를 사용하기 때문에
소스코드에서 ShellExecute() 를 사용할 경우 실제적으론 매크로 치환돼서 ShellExecuteW()가 사용됩니다.
따라서...
ShellExecute(NULL, "print", TempBMPFName.c_str(), NULL, NULL, SW_HIDE);
위 코드를...
ShellExecute(NULL, L"print", TempBMPFName.c_str(), NULL, NULL, SW_HIDE);
위와같이 문자열 앞에 'L'을 붙여서 유니코드 문자열 임을 명시해야 합니다.
이런 건, 가장 기본적인 C++ 기초 인데요...
|