kkuzil.own@gmail.com

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
Posted
Filed under Development/Delphi
function AnsiDequotedStr(const S: string; AQuote: Char): string;

QuotedStr과는 반대로 양쪽 따옴표를 제거해준다.
QuoteStr과 다른점은 따옴표를 지정해 줄수 있다.
단, 양쪽에 똑같이 있을때만 제거가 된다..!

예) Quote = ", "what is"    --> what is
     Quote = 1, "1what is1" --> what is
     Quote = 1, "1what is"   --> 1what is
2010/06/30 11:18 2010/06/30 11:18
Posted
Filed under Development/Delphi
function QuotedStr(const S: String); String;

문자열 S 앞뒤에 따옴표 (')를 붙혀준다.
중간에 따옴표가 있다면 처리할 수 있도록 더 붙혀준다.

예) what is  --> 'what is'
      what's  --> 'what''s'
2010/06/30 11:10 2010/06/30 11:10
Posted
Filed under Development/Delphi
출처 : http://oranke.elogin.co.kr/wiki/index.php/델파이

var
  Soo: DWORD;
 
...
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Soo := RegisterWindowMessage('TaskbarCreated'); // 메시지를 등록...
end;
 
...
 
procedure TForm1.WndProc(var wpMessage: TMessage);
begin
  if (wpMessage.Msg = Soo) then // 쉘이 다시 시작된 것이면...
  begin
     ShowMessage('쉘 다시 시작!!');
  end
  else
    inherited WndProc(wpMessage);
end;
2010/05/24 12:46 2010/05/24 12:46