프로그래밍/델파이 80

메모리 관리 툴들의 벤치마크 자료(FastMM, ScaleMM2, TCmalloc, ...)

아래 글들을 참고하여 보면, FastMM 보다 나은 메모리 관리 툴들에 대한 벤치마크 자료가 있습니다. 구글에서 제공하는 TCmalloc 성능이 정말 좋네요. 델파이에서 개발할 때도 링크만 해주면 될지 아직은 잘 모르겠지만, 멀티 스레드 환경에서는 정말 엄청난 성능 차이가 있군요. 간단한 벤치마크 자료 : https://plus.google.com/u/0/110131086673878874356/posts/T8DfTFhMBQc또다른 벤치마크 자료 : http://scalemm.googlecode.com/svn/trunk/Challenge/Results/MMBench_all.htm scalemm google site : http://code.google.com/p/scalemm/ SynScaleMM - a ..

Crypt32의 CryptProtectData, CryptUnprotectData 사용 예

윈도우즈에서 데이터 암호화 저장에 자주 이용하는 Crypt32.dll 내에 CryptProtectData, CryptUnprotectData 두 함수를 사용한 암호화 및 복호화 예제입니다. 먼저 아래와 같은 구조체 및 함수들을 선언하여 줍니다. type _CRYPTOAPI_BLOB = record cbData: DWORD; pbData: PBYTE; end; {$EXTERNALSYM _CRYPTOAPI_BLOB} DATA_BLOB = _CRYPTOAPI_BLOB; {$EXTERNALSYM DATA_BLOB} PDATA_BLOB = ^DATA_BLOB; {$EXTERNALSYM PDATA_BLOB} PCRYPTPROTECT_PROMPTSTRUCT = ^CRYPTPROTECT_PROMPTSTRUCT; {$E..

[Component] Vampyre Imaging Library

델파이용 Cross-platform용 이미지 라이브러리입니다. 현재 2009년 10월 13일 마지막 배포버전인 0.26.4가 배포되어 있는 상태입니다. 1년이 넘도록 업데이트가 없어서 좀 아쉽긴 하네요... 처리 속도 부분은 벤치마킹을 좀 해봐야할 듯 보이네요... 홈페이지 : http://imaginglib.sourceforge.net/ Vampyre Imaging Library is cross-platform native Object Pascal (Delphi and Free Pascal) image loading, saving, and manipulation library. Imaging library features: Native Object Pascal open source crossplatfo..

사용자 환경에 따른 날짜형식 변환 오류에 대한 해결 방법

문자열(string)을 날짜형식(TDateTime)으로 변환할 경우가 많은데, 특정 PC에서만 다음과 같이 형식이 올바르지 않다는 오류가 발생하는 경웅가 있습니다. 날짜 형식에 문제가 없는 문자열임에도 불구하고 나는 오류라 살짝 당황스러울 수 있는 부분이나, 이는 사용자 PC의 국가 및 언어설정이 일반 PC와는 조금 다르게 설정되어 있기 때문입니다. 제어판에 보면 "국가 및 언어설정"을 설정하는 부분이 있는데, 이곳에 날짜 구분자가 일반적으로는 하이픈("-")으로 되어 있지만, 위 문제가 발생한 고객의 PC에서는 필요에 의하여 다른 문자로 변경되어 있는 경우, StrToDateTime 함수 호출시 위 그림과 같은 오류가 발생하게 됩니다. 일반적으로 간단한 날짜 형식이 "yyyy-MM-dd"로 되어 있는데..

정렬된 TStringList의 Add와 Find에 대하여...

특정 단어를 빠르게 검색하기 위하여 정렬된(Sorted := true) TStringList 객체를 사용하고 있었습니다. 그런데, 생각했던것 보다 성능이 매우 떨어졌습니다. 처음 구현할 때는 Find 메소드를 사용하지 않고 무조건 Add 메소드만을 이용했었습니다. Duplicates 속성에서 dupIgnore를 할당하여, 중복된 단어일 경우에는 음수 값을 반환할 것으로 생각했었기 때문입니다. 그래서 무조건 단어를 Add한 이후에 음수 값을 반환하면, 단어에 따른 부가 처리 부분을 수행하지 않도록 하였었습니다. 그러나 복병은 TStrings.Add 메소드에 있었습니다. Duplicates := dupIgnore를 할당하였어도 Add 메소드는, 중복된 단어인 경우에는 해당 단어의 위치값을 반환하고, 중복되지..

유니코드용 InnoSetup으로 만든 설치 프로그램에 ActveX를 통한 설치시 먹통이 되는 문제

문제점유니코드용 InnoSetup 버전으로 설치 프로그램을 만들어 놓고, 그 설치 프로그램을 별도로 제작한 ActiveX를 이용하여 자동으로 다운로드 받아서 설치해 주고자 할때, Windows XP 에서 설치 프로그램이 먹통이 되어 버리는 문제가 발생하였습니다. 해결방법혹시나 하고 유니코드용 InnoSetup으로 재설치하기 전에 만들어 놓은 설치 프로그램은 동일한 설치용 ActiveX를 이용한 자동 설치에서 제대로 잘 설치가 되는 것이었습니다. 그리하여 유니코드용 InnoSetup 버전을 삭제하고, 일반 버전으로 다시 설치하였습니다. 그리고, 설치 프로그램을 다시 만들어서 테스트를 하였더니, Windows XP에서 ActiveX를 통한 자동 설치 과정중에 먹통이 되는 현상이 사라졌습니다. 결론코드 체계를..

프로세스ID(ProcessID)로 윈도우 핸들(HWND) 구하기

서론 CreateProcess로 새로운 프로세스를 만든 이후에, 만들어진 프로세스의 메인 윈도우 핸들을 얻기 위한 방법을 알아 보겠습니다. 특정 클래스의 윈도우 핸들을 얻기 위해서 FindWindow를 사용하는데, 개발자가 임의로 CreateProcess를 통하여 실행시킨 프로세스의 메인 윈도우 핸들을 얻는 방법은 다음 GetHwndFromProcessID 함수를 이용하면 됩니다. 설명 아래 GetHwndFromProcessID 함수의 코드입니다. function GetHwndFromProcessID(dwProcessID: DWORD): THandle; var hWnd: THandle; dwProcessID2: DWORD; begin hWnd := FindWindow(nil, nil); // 최상위 윈도..

728x90