반응형

파워빌더 11 제품발표 세미나에서 Q/A시간에 어떤 개발자 분이 했던 질문이 있었다. 데이터윈도우(DW)에서 Query를 수정하면 기존 화면이 변경되는 경우가 있는데, 이거 개발자가 의도하지 않는 경우는 변경안되도록 해달라는 요지의 질문이었다. 답변에 나선 John Strano는 파워빌더가 개발의 편의를 위해서 자동으로 DW의 컬럼명을 rebuild하는 기능인데, 개발자가 의도하지 않은 때가 있기 때문에 그런 문제가 생긴 것같고, 이 문제는 여러 개발자들의 의견을 수렴해서 EBF에 반영하겠다는 원론적이 답변을 하였다.
이 문제는 파워빌더로 레포트를 개발하다가 보면 개발자를 아주 짜증나게 하는 원인이 되기도 한다. 이쁘게 만들어 둔 레포트화면이 쿼리의 컬럼면 하나 수정으로 다 틀어져 버리는 경우가 생기기 때문이다.

세미나에서 질문을 한 개발자도 이야기 했지만, 대부분의 레포트의 개발은 우선 쿼리를 DB관리툴(TOAD)에서 만든 다음 파워빌더에서 DW를 생성하는 방법을 사용한다. 나도 대부분의 레포트를 TOAD같은 툴에서 미리 쿼리를 생성하고 Data를 검증한 후 파워빌더에서 DW를 새로 생성할때 Design > Conver to Syntax메뉴를 선택하여 TOAD에서 만든 쿼리를 복사/붙혀넣기해서 작업을 진행한다. Graphic모드가 Default로 되어 있는데 이것도 옵션으로 처리하게 했으면 좋겠는데... 외국 개발자들은 Graphic모드에서 다 처리하는지도 모르겠다. --;

우선 이렇게 생성한 DW의 쿼리가 변경되었을때 일반적으로 개발자들은 DW Painter를 오픈하고 Data Source 툴바를 클릭하고 쿼리를 수정하게된다. 여기서 문제가 발생한다. 기존 쿼리의 컬럼명을 바꾸었는데, 그 컬럼이 DW에서 Display되던 컬럼이었다면 컬럼에 적용된 디자인은 모두 날라가버리게 된다. 파워빌더가 기본으로 DW의 컬럼명을 자동으로 생성하기 때문이다. 옵션으로 이 기능을 해제할 방법도 없다.

해결방안은 Edit Source를 이용하는 것이다.

DW 오브젝트를 선택하고 오른쪽 마우스키를 클릭하면 파업메뉴가 뜨는데 그중 Edit Source를 선택하면, 파워빌더의 텍스트 에디트 페인터에 DW의 오리지널 소스가 표시되고, 수정할 수가 있게 된다. 여기서 retrieve항목의 값이 Query값이 된다. retrieve항목의 값으로 더블코테이션("")안에 쿼리가 위치하는데, Query가 멀티라인일 경우 Syntax Highlight가 조금 이상하지만 자세히 보면 쿼리부분을 금방 구분할 수가 있을 것이다. 이 부분의 쿼리를 변경해 주면 DW의 디자인은 전혀 변경이 되지않는다.

이 Tip은 또다른 경우에도 사용될 수가 있다. 바로 Update Properties의 불필요한 변경을 방지하는 경우이다.

DW화면 디자인 뿐아니라 DW의 Update()함수를 이용하여 데이터를 추가/삭제하는 기능이 있는 DW에 쿼리가 변경될 경우 Update Properties에 설정된 내용이 몽창 날라가 버리는 경우가 있다. 이 문제을 알면 다행인데, 모르고 넘어가면 잘 동작하던 프로그램이 오동작을 하게되어 버그를 찾는데 한참 삽질을 해야하는 경우가 발생한다. 나도 많이 그랬으니까... --;
이런 경우에도 Edit Source를 이용하여 쿼리를 수정하면 Update Properties에 설정했던 내용은 전혀 변경되지 않는다. Edit Source로 보면 알겠지만 Retrieve항목의 쿼리바로 다음에 Update Properties의 설정 내용이 있는 것을 알 수가 있을 것이다. DW 페인터에서는 이부분 또한 자동으로 생성되기 때문에 쿼리가 수정되면 문제가 발생하는 것이다.

이렇게 Edit Source로 소스를 자주 수정하다 보면 다른 오브젝트들도 Edit Source기능으로 수정하는 경지에 이르게 된다. ^^;

반응형

http://services.nexodyne.com/email/
 

사용자 삽입 이미지



잘 사용하지 않지만 위 사이트에서 제작한 나의 구글 메일 주소 이미지이다..

나름 깔끔하게 잘 나왔다 ㅎㅎ

반응형
Ø

라이브러리란?
특정한 코드(함수 혹은 클래스)를 포함하고 있는 컴파일된 파일이다.

라이브러리를 만드는 이유?
 자주 사용되는 특정한 기능을 main 함수에서 분리시켜 놓음으로써, 프로그램을 유지, 디버깅을 쉽게하고 컴파일 시간을 좀더 빠르게 할수 있기 때문이다.

라이브러리에도 그 쓰임새에 따라서 여러가지 종류가 있다(크게 3가지). 가장 흔하게 쓰일수 있는 "정적라이브러리"와 "공유라이브러리", "동적라이브러리" 가 있다.

이들 라이브러리가 서로 구분되어지는 특징은 적재 시간이 될것이다.

정적라이브러리

정적라이브러리는 object file(.o로 끝나는) 의 단순한 모음이다. 정적라이브러린느 보통 .a 의 확장자를 가진다. 간단히 사용할수 있다. 컴파일시 적재되므로 유연성이 떨어진다. 최근에는 정적라이브러리는 지양되고 있는 추세이다. 컴파일시 적재되므로 아무래도 바이너리크기가 약간 커지는 문제가 있을것이다.

공유라이브러리

공유라이브러리는 프로그램이 시작될때 적재된다. 만약 하나의 프로그램이 실행되어서 공유라이브러리를 사용했다면, 그뒤에 공유라이브러리를 사용하는 모든 프로그램은 자동적으로 만들어져 있는 공유라이브러리를 사용하게 된다. 그럼으로써 우리는 좀더 유연한 프로그램을 만들수 잇게 된다.

정적라이브러리와 달리 라이브러리가 컴파일시 적재되지 않으므로 프로그램의 사이즈 자체는 작아지지만 이론상으로 봤을때, 라이브러리를 적재하는 시간이 필요할것이므로 정적라이브러리를 사용한 프로그램보다는 1-5% 정도 느려질수 있다. 하지만 보통은 이러한 느림을 느낄수는 없을것이다.

동적라이브러리

공유라이브러리가 프로그램이 시작될때 적재되는 반면 이것은 프로그램시작중 특정한때에 적재되는 라이브러리이다. 플러그인 모듈등을 구현할때 적합하다. 설정파일등에 읽어들인 라이브러리를 등록시키고 원하는 라이브러리를 실행시키게 하는등의 매우 유연하게 작동하는 프로그램을 만들고자 할때 유용하다.

– MS VC++  라이브러리 만들기


사용자 삽입 이미지
1.project name란에 라이브러리 이름 작성
사용자 삽입 이미지
사용자 삽입 이미지












2.test.c 파일을 생성한다.(함수 정의(구현)부분에 대한 내용)

3.test.h 파일을 생성한다.(함수의 선언부분이 있는곳)

사용자 삽입 이미지

 
//나만의 덧셈 라이브러리 만들기
#include <stdio.h>
#include "test.h"
//덧셈 함수 구현부분
int Add(int a,int b)
{
   return a+b;
}




3.test.h 에 함수에 대한 선언
   ex> int Add(int a, int b);
4.컴파일 하면 Debug 디렉토리 안에 프로젝트명.lib 이 생성

그 다음은 헤더파일을 해당 프로젝트에 넣고 라이브러리 링크
시키면 사용됨.

C로 만든 라이브러리를 C++ 프로젝트에 사용할때는 주의를 하자.
컴파일 과정에서 만들어진 라이브러리의 함수명이 차이가 있다.
C 로 만든 라이브러리는 C프로젝트에서..
C++로 만든 라이브러리는 C++프로젝트에서..
다른 방법으로는 위에 글에 설명..
반응형

C++에서 Memory(auto든 static이든 dynamic이든)를 사용할 때 초기화 하지 않았을 때의 값은 Undefined다. VC++에서는 Debug모드일 때 메모리 관련 오류를 디버깅하기 위해 자동으로 메모리를 초기화 해 주는데, 그 값들은 아래와 같다.


  • 0xcccccccc (3435973836) - 초기화 되지 않은 지역변수.
  • 0xcdcdcdcd (3452816845) - 초기화되지 않은 힙에 할당된 메모리.
  • 0xdddddddd (3722304989) - 힙에서 free된 메모리.
  • 0xfeeefeee (4277075694) - 힙에서 free된 메모리.
  • 0xfdfdfdfd (4261281277) - 힙에 할당된 메모리의 초과범위(할당된 메모리의 양쪽 끝)


참고하자!

From: http://blog.empas.com/lisyoen/16384741


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

디버그모드시 쓰레기 값의 의미

*릴리즈는 이값을 채워넣지않음.


  • 0xCCCCCCCC
    초기화 하지 않은 지역변수
  • 0xCDCDCDCD
    힙에 할당된 메모리다.그러나 초기화 되지 않았다.
  • 0xDDDDDDDD or 0xFEEEFEEE
    힙에서 Free된 메모리이다. 그것을 사용할 때
  • 0xFDFDFDFD

할당한 것을 벗어난 heap의 공간을 사용할 시

알고 보니 단순 쓰레기값이 아니더라구요,
디버깅할때 잘못된 메모리 주소 사용으로인해 프로그램이 중단되었을경우
값을 보고 원인을 찾을수 있습니다.


원문출처 : http://www.gpgstudy.com/forum/viewtopic.php?topic=10342
참고출처 : http://www.codeguru.com/Cpp/W-P/win32/tutorials/article.php/c9535/


+ Recent posts