C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[74581] Re:Re:Re:[질문] 프로젝트 파일 복구 방법?
빌더(TWx) [builder] 4050 읽음    2017-09-20 10:29
님이 쓰신 글 :
: 빌더(TWx) 님이 쓰신 글 :
: : 단단한돌 님이 쓰신 글 :
: : : 환경: C++ Builder XE5
: : :
: : : 프로젝트 옵션에 들어가서 보면 Form 리스트 정보가 나오지 않습니다.
: : : (Project -> Project Options -> Forms)
: : :
: : : Icon을 지정하는 Application 에서도 기존에 지정한 Icon이 보이지가 않습니다.
: : : (Project -> Project Options -> Application)
: : :
: : : 프로젝트 파일이 손상된 것 같은데..
: : : 복구할 수 있는 방법은 어떤 것이 있나요?
: : :
: : : 감사합니다.
: : :
: : :
: :
: :
: : 답변:
: :
: :
: : RAD Studio 10.2 의 경우를 예로들어서 설명하면 (설치되어 있는 컴파일러가 10.2 밖에 없음)
: :
: : 프로그램 아이콘은 '디폴트' 버튼을 눌러서 선택하면 .cbproj 프로젝트 파일에 반영되고.
: :
: : (Project -> Project Options -> Forms)
: : 에서의 폼 리스트는...
: :
: : 예를 들어서... 프로젝트에서
: :
: : From1(Unit1.cpp/Unit1.h/Unit1.dfm), Form2(Unit2.cpp/Unit2.h/Unit2.dfm)
: :
: : 위와 같이 2개의 폼이 있는데도 (Project -> Project Options -> Forms) 폼 리스트에 나타나지 않는다면
: :
: :
: : 프로젝트 네임이 Project1.exe 로 되어있다면...
: :
: : Project1.cpp 파일을 열어서
: :
: : //---------------------------------------------------------------------------
: : USEFORM("Unit1.cpp", Form1);
: : USEFORM("Unit2.cpp", Form2);
: : //---------------------------------------------------------------------------
: : int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
: : {
: :     try
: :     {
: :         Application->Initialize();
: :         Application->MainFormOnTaskBar = true;
: :         Application->CreateForm(__classid(TForm1), &Form1);
: :         Application->CreateForm(__classid(TForm2), &Form2);
: :         Application->Run();
: :     }
: :       ...........
: :
: :
: : 위와 같은 식이 되도록
: :
: :         Application->CreateForm(__classid(TForm1), &Form1);
: :         Application->CreateForm(__classid(TForm2), &Form2);
: :
: : 코드가 설정되어 있어야 합니다.
: :
: :
: : C++빌더 IDE는 '프로젝트 네임.cpp' 파일을 파싱해서
: : 결과를 (Project -> Project Options -> Forms) 폼 리스트에 반영하도록 IDE가 구현되어 있습니다.
: :
: : 저런 식이 되도록 '프로젝트 네임.cpp' 파일을 수정/저장 해서 (Project -> Project Options -> Forms)
: : 폼 리스트를 다시 열어 보세요.
: :
:
: //#include 
: //#pragma hdrstop
: #include "Precompile.h"      // Precompile header 사용 
: 
: #include 
: //------------------
: USEFORM("UnitDM.cpp", DM); /* TDataModule: File Type */
: USEFORM("UnitMain.cpp", FormMain);
: //---------------------------------------------------------------------------
: int WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
: {
: 	HANDLE hMutex = NULL;
: 	try
: 	{
: 		hMutex = CreateMutex(NULL, TRUE, L"Application/XXXMutex");
: 		if ( NULL == hMutex )
: 			throw Exception("Error:CreateMutex failed.");
: 		if ( GetLastError() == ERROR_ALREADY_EXISTS ) {
: 			OutputDebugStringA("Named Mutex already exist. skip Application init..");
: 			CloseHandle(hMutex);
: 			return 0;
: 		}
: 		Application->Initialize();
: 		Application->MainFormOnTaskBar = true;
: 		Application->CreateForm(__classid(TFormMain), &FormMain);
: 		Application->CreateForm(__classid(TDM), &DM);
: 		Application->Run();
: 	}
: 	catch (Exception &exception)
: 	{
: 		Application->ShowException(&exception);
: 	}
:         // do something...
: }

:
: 위와 같은 코드로 되어 있는데요..
: 중복 방지를 위한 Mutex 코드가 들어 있는데.. 이 코드를 try{} 구문 밖으로 빼도 마찬가지내요.
: 이상한 것은 다른 프로젝트에서는 이와 동일한 코드로 구성되어 있는데
: 프로젝트 옵션에 폼리스트가 잘 보입니다.
: (다른 점이라면 이 프로젝트는 Precompile Header를 만들어서 Include했다는 것이고,
: 다른 프로젝트는 Precompile Header 없이 사용하는 것입니다. 이 차이일까요? )
:
:


답변:


clang 컴파일러가 사용되면 별개의 헤더파일을 프리컴파일드 헤더로 사용해서 컴파일 하지만
classic 컴파일러로 컴파일 하도록 설정되어 있으면


#include <vcl.h>
#pragma hdrstop

#include <tchar.h>


소스파일에서
#pragma hdrstop 구문 위 까지 포함되어있는 헤더파일들은 컴파일러에 의해서 프리컴파일헤더로
사용되게 되어 있습니다.

프리컴파일드 헤더로 사용하려면

#include <vcl.h>
#include "yourPrecompiledHeader.h"

#pragma hdrstop

#include <tchar.h>
..............


와 같은 식으로 #pragma hdrstop 위에 프리컴파일로 사용할 헤더를 적어주면 됩니다.

#pragma hdrstop

의 의미는 #pragma hdrstop 까지 지정된 헤더파일들은 프리컴파일 하고
이후 부터는 프리컴파일 헤더로 사용하지 않겠다는 것을 컴파일러 한테 지시하는 겁니다.

컴파일러가 #pragma hdrstop 으로 이미 프리컴파일을 지원하고있는데 왜 저런 식으로
코드를 작성했나요. 전혀 불필요한 행동인데.


프로젝트 하나 새로 만들어서 생기는 소스형태 그대로 사용하세요.
프리컴파일로 사용할 헤더들은 #pragma hdrstop 위에 나열해 주는 것으로 컴파일러가
알아서 프리컴파일 합니다.

두개의 폼은 .cpp/.h/.dfm 카피해서 새로 만든 프로젝트로 포함시키고.


그리고 헤더파일이 개발 과정동안 자주 수정되는... 사용자가 정의한 헤더파일들은
프리컴파일 헤더로 사용하지 마세요.

헤더가 변경될 때 마다... 프리컴파일 프로세싱을 다시 시작해야해서 컴파일 시간만
잡아 먹으므로...



+ -

관련 글 리스트
74577 [질문] 프로젝트 파일 복구 방법? 단단한돌 3364 2017/09/19
74579     Re:[질문] 프로젝트 파일 복구 방법? 빌더(TWx) 3714 2017/09/20
74580         Re:Re:[질문] 프로젝트 파일 복구 방법? 3433 2017/09/20
74581             Re:Re:Re:[질문] 프로젝트 파일 복구 방법? 빌더(TWx) 4050 2017/09/20
74582                 땡큐~! 땡큐~! 감사합니다~!! 단단한돌 3366 2017/09/20
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.