About 다이얼로그 만드는 방법
1. GetFileVersionInfoSize 이용해서 버젼 정보 크기 얻는다.

2. 버젼 정보를 저장할 메모리를 할당한 후에 버젼 정보를 얻는다.
   MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize);
   MemPtr = GlobalLock(MemHandle);
   GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr);

3. VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr,&BufferLength); 함수를 이용해서 각 정보를 얻는다.

-실제 소스-
코드:
    struct TransArray
    {
       WORD LanguageID, CharacterSet;
    };

    DWORD VerInfo, VerSize;  
    HANDLE MemHandle;
    LPVOID MemPtr, BufferPtr;
    UINT BufferLength;
    TransArray *Array;
    char QueryBlock[40];

    // Get the product name and version from the
    // applications version information.
    String Path(Application->ExeName); //프로그램 패스 얻어오기
    VerSize = GetFileVersionInfoSize(Path.c_str(), &VerInfo);//버젼 정보 크기 얻어오기
    if (VerSize > 0) {
        MemHandle = GlobalAlloc(GMEM_MOVEABLE, VerSize);
        MemPtr = GlobalLock(MemHandle);
        GetFileVersionInfo(Path.c_str(), VerInfo, VerSize, MemPtr);
        VerQueryValue(MemPtr, "\VarFileInfo\Translation", &BufferPtr,
                      &BufferLength);
        Array = (TransArray *)BufferPtr;

        // Get the product name.
        wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductName",
                 Array[0].LanguageID, Array[0].CharacterSet);
        VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength);
        // Set the product name caption.
        ProductName->Caption = (char *)BufferPtr;

        // Get the product version.
        wsprintf(QueryBlock, "\StringFileInfo\%04x%04x\ProductVersion",
                 Array[0].LanguageID, Array[0].CharacterSet);
        VerQueryValue(MemPtr, QueryBlock, &BufferPtr, &BufferLength);
        // Set the version caption.
        Version->Caption = (char *)BufferPtr;

        GlobalUnlock(MemHandle);
        GlobalFree(MemHandle);
    } else {
        ProductName->Caption = "";
        Version->Caption = "";
    }

    Comments->Caption = "Thank you for trying this fabulous product.n"
                        "We hope that you have enjoyed using it.";

'Computer > C++' 카테고리의 다른 글

BCB 6에 Indy 10 설치 하기 관련...  (0) 2005.11.23
BCB - StrToHex 함수  (0) 2005.11.06
BCB 6에 DSPack 2.3.4 설치  (0) 2005.09.10
카일릭스 설치 및 일반적인 문제점  (0) 2005.07.10
void pointer 샘플  (0) 2005.07.10
TStingList이용해서 텍스트 파일 파싱하기  (0) 2003.11.16
Effective C++ Second Edition  (0) 2003.10.13
Child control 관리  (0) 2003.09.15
C++ 사이트 모음  (0) 2003.04.08
C와 C++의 name mangling  (0) 2003.03.04
Posted by Gu Youn
,
Posted by Gu Youn
,
테이블에 트랜잭션과 파라미터 이용해서 인서트 하기.

  with ADOConnection1 do begin
    BeginTrans();

    with ADOQuery1 do Begin
      Close();
      SQL.Clear();
      SQL.Add('INSERT INTO member_tbl (member_type,passwd,member_id) VALUES');
      SQL.Add('(:member_type,:passwd,:member_id)');
      Parameters.ParamByName('member_type').Value  := 'S';
      Parameters.ParamByName('passwd').Value := 'S';
      Parameters.ParamByName('member_id').Value := 'wwww';
      ExecSQL;
    end;

    CommitTrans;
  end;
Posted by Gu Youn
,
1. 개념 : TStringList의 Delimiter / DelimitedText를 이용

2. 소스
  TStringList* list;

  try
  {
    list = new TStringList;
    list->LoadFromFile("test1.mfc");//파일 이름

    int lines = list->Count;
    Memo1->Lines->Add("lines:"+String(lines));

    for(int i=0; i<lines; i++)
    {
      TStringList *temp = new TStringList;
      temp->Delimiter = 't';
      temp->DelimitedText = list->Strings[i];

      for(int j=0; j < temp->Count; j++)
      {
        //Memo1->Lines->Add(String(i)+","+String(j)+" : "+temp->Strings[j]);
      }
      delete temp;
    }

  }
  __finally
  {
    delete list;
  }

'Computer > C++' 카테고리의 다른 글

BCB - StrToHex 함수  (0) 2005.11.06
BCB 6에 DSPack 2.3.4 설치  (0) 2005.09.10
카일릭스 설치 및 일반적인 문제점  (0) 2005.07.10
void pointer 샘플  (0) 2005.07.10
파일의 버젼 정보 얻기  (0) 2003.12.14
Effective C++ Second Edition  (0) 2003.10.13
Child control 관리  (0) 2003.09.15
C++ 사이트 모음  (0) 2003.04.08
C와 C++의 name mangling  (0) 2003.03.04
서버 이름을 리스트 박스에 출력하는 샘플(gethostbyaddr() 함수 이용)  (0) 2002.07.12
Posted by Gu Youn
,
웹에서 찾은 자료 같은데 정확한 출처는 기억이 안난다.

<%
     OPTION EXPLICIT
     const BASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
     dim nl
     ' zero based arrays
     dim Base64EncMap(63)
     dim Base64DecMap(127)

     ' must be called before using anything else
     PUBLIC SUB initCodecs()
          ' init vars
          nl = "<P>" & chr(13) & chr(10)
          ' setup base 64
          dim max, idx
             max = len(BASE_64_MAP_INIT)
          for idx = 0 to max - 1
               ' one based string
               Base64EncMap(idx) = mid(BASE_64_MAP_INIT, idx + 1, 1)
          next
          for idx = 0 to max - 1
               Base64DecMap(ASC(Base64EncMap(idx))) = idx
          next
     END SUB

     ' encode base 64 encoded string
     PUBLIC FUNCTION base64Encode(plain)

          if len(plain) = 0 then
               base64Encode = ""
               exit function
          end if

          dim ret, ndx, by3, first, second, third
          by3 = (len(plain) 3) * 3
          ndx = 1
          do while ndx <= by3
               first  = asc(mid(plain, ndx+0, 1))
               second = asc(mid(plain, ndx+1, 1))
               third  = asc(mid(plain, ndx+2, 1))
               ret = ret & Base64EncMap(  (first 4) AND 63 )
               ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second 16) AND 15 ) )
               ret = ret & Base64EncMap( ((second * 4) AND 60) + ((third 64) AND 3 ) )
               ret = ret & Base64EncMap( third AND 63)
               ndx = ndx + 3
          loop
          ' check for stragglers
          if by3 < len(plain) then
               first  = asc(mid(plain, ndx+0, 1))
               ret = ret & Base64EncMap(  (first 4) AND 63 )
               if (len(plain) MOD 3 ) = 2 then
                    second = asc(mid(plain, ndx+1, 1))
                    ret = ret & Base64EncMap( ((first * 16) AND 48) + ((second 16) AND 15 ) )
                    ret = ret & Base64EncMap( ((second * 4) AND 60) )
               else
                    ret = ret & Base64EncMap( (first * 16) AND 48)
                    ret = ret & "="
               end if
               ret = ret & "="
          end if

          base64Encode = ret
     END FUNCTION

     ' decode base 64 encoded string
     PUBLIC FUNCTION base64Decode(scrambled)

          if len(scrambled) = 0 then
               base64Decode = ""
               exit function
          end if

          ' ignore padding
          dim realLen
          realLen = len(scrambled)
          do while mid(scrambled, realLen, 1) = "="
               realLen = realLen - 1
          loop
          dim ret, ndx, by4, first, second, third, fourth
          ret = ""
          by4 = (realLen 4) * 4
          ndx = 1
          do while ndx <= by4
               first  = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
               second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
               third  = Base64DecMap(asc(mid(scrambled, ndx+2, 1)))
               fourth = Base64DecMap(asc(mid(scrambled, ndx+3, 1)))
               ret = ret & chr( ((first * 4) AND 255) +   ((second 16) AND 3))
               ret = ret & chr( ((second * 16) AND 255) + ((third 4) AND 15) )
               ret = ret & chr( ((third * 64) AND 255) +  (fourth AND 63) )
               ndx = ndx + 4
          loop
          ' check for stragglers, will be 2 or 3 characters
          if ndx < realLen then
               first  = Base64DecMap(asc(mid(scrambled, ndx+0, 1)))
               second = Base64DecMap(asc(mid(scrambled, ndx+1, 1)))
               ret = ret & chr( ((first * 4) AND 255) +   ((second 16) AND 3))
               if realLen MOD 4 = 3 then
                    third = Base64DecMap(asc(mid(scrambled,ndx+2,1)))
                    ret = ret & chr( ((second * 16) AND 255) + ((third 4) AND 15) )
               end if
          end if

          base64Decode = ret
     END FUNCTION

' initialize
     call initCodecs

' Testing code
'    dim inp, encode
'    inp = request.QueryString("input")
'    encode = base64Encode(inp)
'    response.write "Encoded value = " & encode & nl
'    response.write "Decoded value = " & base64Decode(encode) & nl
%>

Posted by Gu Youn
,
사용자 삽입 이미지








1. 제목 / 한국어판 제목:  
         Effective C++
2. 저자/역자:  
         Scott Meyers
3. 출판년도/출판사/한국어판 출판사:
         2001 / Addision Wesely
4. 분야 :
         플랫폼 독립 프로그래밍 / ANSI C++
-----------------------------------------------------------------
작년에 읽다가 다 못봐서 9월 부터 지하철에서 조금씩 읽기 시작함
읽는 것보다는 실제로 코딩을 해봐야 이해가 많이 될거 같음. 나중에 한번 더 읽어봐야 될거 같음.

2003.10.13
Item 11
  클래스 member data로 pointer 등을 사용할 때는 copy Constructor & assignment operator를 정의해야 한다.
2003.10.14
Item 13
  ㄱ. 생성자 안에서 초기화 하는 것보다는 initialization list에서 멤버 변수 초기화 하는 것이 효율적임
  ㄴ. const, reference 형은 initialization list에서 초기화 한다.
  ㄷ. member data(int, double...) 형으로 많은 변수를 초기화 하는 경우에는 생성자 안에서 초기화 한다.
  ㄹ. initialization list에서 초기화 순서는 리스트 상의 순서가 아니라 클래스에서 선언된 순서에 따른다.

2003.10.15
Item 14
  ㄱ. 클래스에 적어도 하나의 virtual function 이 존재하면 virtual destructor를 선언한다.
  ㄴ. vptr(virtual table pointer) / vtbl(virtual table)
  ㄷ. virtual function을 갖는 오브젝트는 Fortran / C에 인자로 전달 할 수 없다.

2003.10.27
Item 15
  operator= 에 대한 정리

Item16
  operator= 구현 방법
  ㄱ. base class의 private member 경우
  ㄴ. default assignment function을 직접 호출 할 수 없는 컴파일러 경우
  ㄷ. derived class에서 copy constructor 구현시 base class의 copy constructor가 호출되게 해야한다.

2003.11.03
Item17
Posted by Gu Youn
,

Child control 관리

Computer/C++ 2003. 9. 15. 10:59
개념 : Form과 같은 parent control에는 ControlCount, Controls 프로퍼티가 있으며 이것을 이용해서 child control을 관리 할 수 있다.

controls : parent가 Form인 것들의 리스트
components : owner가 Form인 것들의 리스트

ClassName, ClassNameIs 함수를 이용하면 오브젝트의 타입 스트링을 얻을 수 있음.

소스 :
1. Controls 사용

  //form 에 있는 control 개수 구하기
  int max = StrToInt(Form1->ControlCount);

  //control 개수 만큼 루프 돌면서 각 컨트롤의 tag 값 비교 및 초기화
  for (int i=0;i<max;i++)
  {
    TControl *ChildControl = Form1->Controls[i];
    int tag = ChildControl->Tag;
    if(tag == 1)
    {
      (dynamic_cast<TLabel*>(ChildControl))->Caption = "a";
    }
    else
    {
      (dynamic_cast<TLabel*>(ChildControl))->Caption = "b";
    }
  }

2. Component 사용
  int max = Form1->ComponentCount;
  TComponent *ChildComponent;

  for (int i=0; i<max ; i++)
  {
    ChildComponent = Form1->Components[i];
    String ClassName = String(ChildComponent->ClassName());
  }
Posted by Gu Youn
,

한 컴퓨터에서 서블릿 작업후에 다른 컴퓨터의 웹서버에 올려서 접속하면 작업 컴퓨터에서는 한글이 깨지지 않지만 다른 웹서버에서는 한글이 깨지는 경우가 발생한다. 이럴 경우에는 두 컴퓨터의 인코딩 타입이 달라서 발생하는 문제로 생각되므로 컴파일 시에 인코딩 타입을 지정해 준다.

javac –encoding euc-kr [filename]

'Computer > Java' 카테고리의 다른 글

클러스터링된 오라클 jdbc 연결 설정  (0) 2007.01.01
UNIX에서 OCI 드라이버 사용 참고자료.  (0) 2005.11.01
XML2HTML  (0) 2003.06.22
JSP/Servlet 스펙별 지원하는 서버 정보  (0) 2003.03.27
Posted by Gu Youn
,