kkuzil.own@gmail.com

Posted
Filed under Development/Delphi

출처 : http://www.delmadang.com/community/bbs_view.asp?bbsNo=3&bbsCat=0&st=&keyword=&indx=422150&keyword1=&keyword2=&page=1

{$IFDEF VER150}
   // 델파이 7 버전에서 컴파일 되는 부분..
{$ELIF VER210}
   // 델파이2010 버전에서 컴파일 되는 부분..
{$ENDIF}


위의 코드처럼 델파이 버전에 따라서 다르게 컴파일 하고 싶을 때가 있죠..

예를들어 델파이 2009부터는 string 이 UnicodeString 이고 델파이 2007까지는 string 이 ansiString 이기 때문에
다르게 처리하게 되는 경우가 있죠..   

그때 델파이 컴파일러 버전을 알아야 하는데 그걸 정리해 봤습니다.

{$IFDEF VER80}  - Delphi 1
{$IFDEF VER90}  - Delphi 2
{$IFDEF VER100} - Delphi 3
{$IFDEF VER120} - Delphi 4
{$IFDEF VER130} - Delphi 5
{$IFDEF VER140} - Delphi 6
{$IFDEF VER150} - Delphi 7
{$IFDEF VER160} - Delphi 8
{$IFDEF VER170} - Delphi 2005
{$IFDEF VER180} - Delphi 2006
{$IFDEF VER180} - Delphi 2007
{$IFDEF VER185} - Delphi 2007
{$IFDEF VER200} - Delphi 2009
{$IFDEF VER210} - Delphi 2010


그리고 델파이 6 이상에서는 CompilerVersion 을 사용해 버전체크를 할 수 있습니다.

{$IF CompilerVersion >= 18.5}
   //델파이 2007 이상에서 컴파일 되는 소스..
{$IFEND}
아래는 델파이 컴파일러 버전입니다.
 
Delphi 2010 - 21
Delphi 2009 - 20
Delphi 2007 - 18.5
Delphi 2006 - 18
Delphi 2005 - 17
Delphi 8    - 16
Delphi 7    - 15
Delphi 6    - 14


그리고 델파이 8 이상에서는 {$IFDEF_LESS_THAN } 을 사용할 수 있으므로 아래처럼도 됩니다.

{$IFDEF_LESS_THAN VER170}
  // 델파이 8 이상에서만 사용가능한 부분.. 델파이 7이하에서는 IFDEF_LESS_THAN 인식이 안됨..
  // 델파이 8 이하에서 컴파일되는 Code..

{$END}

델파이7 이하버전은 Delphi7Minus 가 define 되어있으므로

{$IFDEF Delphi7Minus}
  // 델파이7 이하에서 컴파일 되는 부분..
{$ENDIF}

2010/07/22 14:33 2010/07/22 14:33
Posted
Filed under Development/Windows API

PVOID VirtualAlloc(
    PVOID pvAddress,
    SIZE_T dwSize,
    DWORD fdwAllocationType,
    DWORD fdwProtect);

가상메모리를 사용하기 위해 가장 많이 사용하게 되는 WinAPI중 하나이다

....
....

출처 : http://spec98.egloos.com/4365938


2010/07/21 11:15 2010/07/21 11:15
Posted
Filed under Development/Delphi
예전부터 brcc32.exe를 알고 있긴한데 이놈을 어따 써먹길래 만들어놨다 했더니..
결국 쓰는날이 왔다;;

기본적으로 IDE환경에서 컴파일 할때는 프로젝트에 포함된 *.rc 파일은 자동으로 *.res로 컴파일되어
바이너리에 붙게되는데.. command에서 컴파일 할때는 이게 안된다;;

*.rc만 추가된 상태에서 컴파일하면 *.res파일이 없다며 컴파일 에러를 뱉게되는데...
msbuild든 dcc32든... 특별한 옵션도 없다.
아무리 옵션을 찾고 별짓을 다 해봤는데.. 없어서 담배가 생각나는 찰나에..(안폈음)
불현듯 스치는 생각.. 리소스 컴파일.. 혹시나 이거면 될까 했는데.. 역시나 잘된다~
왜 이게 지금 생각났을까... 무식하면 여러가지 고생이다..
그래도 이것저것 막 줍고다니니깐 필요할때 지푸라기... 아니 많은 도움이 되는고만~

어쨌든..

ex) brcc32.exe sample.rc

이렇게 하면
sample.res로 컴파일된다~

그럼 해당 파일을 포함한 프로젝트를 command 컴파일 시 잘 삽입되겠지~!

보통 델파이나 빌더 \bin 디렉토리 안에 있을거다.
자세한 건 brcc32.exe /? 하면 되겠징
2010/07/12 16:43 2010/07/12 16:43
Posted
Filed under Development/Delphi

일반적으로 EurekaLog를 사용하는 프로젝트를 command build(MSBuild)할려고 할때
EurekaLog가 포함되지 않는다.

* 방법

1. EurekaLog 정보를 프로젝트에 포함시키고 싶다면 아래와 같이 빌드하여야 한다.

ex) ECC32 "Project1.dpr"

2. 이미 만들어진 바이너리에 EurekaLog 정보를 포함 시키고 싶다면

ex) ECC32 --el_alter_exe"Project1.dpr"

3. 바이너리 지정해서 EurekaLog 정보 포함

ex) ECC32 --el_alter_exe"Project1.dpr;Project1.exe"

IDE에서 빌드할때는 EurekaLog에서 알아서 PostBuild Event를 걸어줘서 2, 3번의 과정을
거치는지, 아니면 DCC32.exe 호출 시 ECC32.exe를 호출해서 빌드하는지 모르겠지만
어쨌든 IDE에서 알아서 해주는데 command에서는 작업자가 직접 처리해줘야 한다.

애초에 이렇게 동작되는지도 모르고 왜 안될까만 한참 고민하다가 개삽질 끝에 알아냈다..ㅠㅠ
(영어만 잘했어도.. 좀더 수월했을텐데...)

ex) MSBuild에서 사용예
      msbuild "Project1.dproj"
      ECC32 --el_alter_exe"Project1.dproj;Project1.exe(생략가능, 생략하면 현재 저장된 OutDir참조)"

이렇게 하면 command 빌드 후 EurekaLog가 포함된 바이너리를 사용할 수 있게된다.



ECC32

ECC32.exe is the command line compiler that EurekaLog uses. and replaces DCC32.exe which is the normal CodeGear compiler. For C++ Builder the EurekaLog compiler is called EMAKE.exe and this article applies to both. When ECC32 is called it will compile your project and then add the EurekaLog debug information to the application. Any parameters you pass to ECC32 are passed onto DCC32 as in a normal compilation. So ECC32 can be used just like DCC32 and you can find plenty of information on these standard parameters in the Delphi help file.

ECC32 정보 : http://blog.eurekalog.com/compiling-from-the-command-line/

2010/07/07 14:06 2010/07/07 14:06
Posted
Filed under Development/Delphi

요즘 프로젝트에 프로그램이 늘어서 일일히 Release로 빌드하고 패키징하는게 여간 귀찮은게 아니다
사용에 따라서 빌드도 바꿔야 되서 define도 플러그 바꿔서 다시 컴파일 패키징.. 이휴
그래서 Batch파일로 일괄 빌드를 만들어서 손쉽게 쫙쫙 빌드해보자 생각했다.

일단 command 라인에서 빌드를 해야하는데.. Delphi에는 DCC32.exe를 이용해서 빌드하는걸로만 알고
일단 시도는 해보았지만..

Build Configuration을 지원하지 않아서 맞춰놓은 Release / Debug에 따라 컴파일 할 수가 없네..
이걸 어쩐다.. 하며 한참을 알아본 결과..

Delphi 2007부터 추가된 MSBuild가 있었다!
이놈을 사용하면 Build Configuration을 이용한 빌드도 할 수 있으며 DCC32.exe에서 쓰는 환경파일(cfg)도
생성할 필요가 없었다~ 아우.. 진작에 스펙좀 보고다닐껄..
2007쓴지 3년이 되가는거 같은데.. 이제야 이런기능이 있는지 알고 시행하고 말이지;;

어쨌든 이제라도 알면됐지머;;

아래는 작성한 스크립트 일부.

==============================================================================================

rem ========================================================
rem MSBuild 함수화(?)
rem 작성일 : 오후 5:39 2010-07-05
rem 수정일 : 오전 11:49 2010-07-07
rem 작성자 : sunk
rem 버  전 : v1.0
rem 마지막으로 수정하신 분 : sunk
rem ========================================================

rem 함수화 하는 방법이 없어서 Batch파일을 통해서 함수화 함~

rem MSBuild 명령줄 참조 = http://msdn.microsoft.com/ko-kr/library/ms164311(VS.90).aspx
rem MSBuild /? 해도 사용법 잘 나옴. (이해하는데는 부족하다)

rem ### Console Log
rem  ## /consoleloggerparameters(=/clp) - 콘솔 로그 사용 (default)
rem   # PerformanceSummary: 작업, 대상 및 프로젝트에 사용된 시간을 표시합니다.
rem   # NoSummary: 빌드 종료 시 표시되는 오류 및 경고 요약을 숨깁니다.
rem   # NoItemAndPropertyList: 각 프로젝트 빌드 시작 시 diagnostic의 자세한 정도로 표시되는 항목 및 속성 목록을 숨깁니다.
rem  ## /noconsolelogger(=/noconlog)    - 콘솔 로그 비활성화

rem ### File Log
rem  ## /l:FileLogger,Microsoft.Build.Engine;logfile=MyLog.log
rem  ##    (append=true;verbosity=diagnostic;encoding=utf-8)

if /i %1 == "Visit" (
msbuild /nologo /noconlog /t:Build /p:DCC_Define=__PRODUCT_VISIT__ /p:Configuration=%2 %3
) Else (
msbuild /nologo /noconlog /t:Build /p:Configuration=%2 %3
)

rem msbuild로 빌드하면 eureka 디버그 환경이 포함되지 않는다.
rem 그래서 아래와 같은 작업을 추가 해준다.
rem 이런 문제조차 있는지 모르다가 테스트중 알게되서 수정하는데.. 겁내 삽질함..ㅅㅂ
rem 일단 설정을 두가지로 빼놨는데,
rem 하나는 예외/오류 메시지 팝업버전이고 다른건 팝업안되게 하는거.
rem "el_config" 요 옵션을 사용하지 않으면 기본설정으로 적용된다.10_0707 11:49:05 sunk
rem ecc32 --el_config"eureka_exception_dlg.eof" --el_alter_exe%3

ecc32 --el_config"eureka_none_exception_dlg.eof" --el_alter_exe%3;%4

if %ERRORLEVEL% EQU 0 (
 echo [%DATE% %TIME%] %5 빌드 성공~
 goto Contunue_Build
) ELSE (
 echo [%DATE% %TIME%] %5 빌드 실패!! 코드 확인바람~ (ERRORLEVEL = %ERRORLEVEL%)
 goto Error_Build
)

:Error_Build

@COLOR 1C
echo 시작 시간 = %SDT%
echo 종료 시간 = %DATE% %TIME%
echo.

echo 대상경로 : %3
echo.

echo 빌드 에러!!!!!!!!!!!!
echo.

rem 에러나면 여기서 빌드 종료.
@pause
@exit;

:Contunue_Build
rem 다음작업 계속 처리.
echo.

2010/07/07 13:30 2010/07/07 13:30