'2003/12'에 해당되는 글 3건

  1. 2003.12.17 유니코드 변환 코드 5
  2. 2003.12.14 파일의 버젼 정보 얻기 2
  3. 2003.12.14 DLL 호출 관련 정리(임시) 16
1. String -> WideChar[] 변환

개념 : MultiByteToWideChar API를 이용한다.

소스 :
    var
        data : String;
        someunicode : array of widechar;
        len : integer;
    begin
        data := '안녕하세요.';
        len := StrLen(PChar(data));
        MultiByteToWideChar(CP_ACP, 0, PChar(data), -1, @someunicode[0], len);
    end;


2. String <-> WIdeString
개념 : 델파이에서는 자동 형변환 되므로 신경 쓸 필요 없음

소스 :
델코 민성기 님 작성
http://www.delphikorea.com/board/zboard/view.php?id=qa&page=1&sn1=&divpage=1&sn=off&ss=on&sc=on&keyword=유니코드&select_arrange=headnum&desc=asc&no=20996

var

WStr : WideString;

SStr : String;



TempStr1, TempStr2 : String;

i : Integer;

begin

WStr := '얼러리꼴러리!';
SStr := WStr;
//이렇게 해도 결과 같음
//SStr :='얼레리꼴러리!';
//Wstr := WIdeString(SStr);


for i:= 1 to Length(WStr) do
begin
TempStr1 := TempStr1 + '$' + IntToHex(Ord(WStr[i]), 2);
if i <> Length(WStr) then TempStr1 := TempStr1 + ', ';
end;

for i:= 1 to Length(SStr) do
begin
TempStr2 := TempStr2 + '$' + IntToHex(Ord(SStr[i]), 2);
if i <> Length(SStr) then TempStr2 := TempStr2 + ', ';
end;

ShowMessage(
Format(
'유니코드 "%s", 길이 %d'#13'%s'
+#13#13+
'일반문자 "%s", 길이 %d'#13'%s',
  [WStr, Length(WStr), TempStr1, SStr, Length(SStr), TempStr2]
)
);

end;

Posted by Gu Youn
,
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 설치 하기 관련...  (4) 2005.11.23
BCB - StrToHex 함수  (1) 2005.11.06
BCB 6에 DSPack 2.3.4 설치  (6) 2005.09.10
카일릭스 설치 및 일반적인 문제점  (4) 2005.07.10
void pointer 샘플  (2) 2005.07.10
TStingList이용해서 텍스트 파일 파싱하기  (2) 2003.11.16
Effective C++ Second Edition  (139) 2003.10.13
Child control 관리  (2) 2003.09.15
C++ 사이트 모음  (139) 2003.04.08
C와 C++의 name mangling  (139) 2003.03.04
Posted by Gu Youn
,
Posted by Gu Youn
,