전체 글 1104

basic_string에서 CString.Replace와 같은 일괄 치환 함수(ReplaceString)

CString.Replace와 같이 특정 문자열을 찾아서 일괄로 치환하여 주는 함수가 basic_string에는 없어 아래와 같이 만들어 보았습니다. /** @brief basic_string 입력한 문자열 내부에서 찾은 문자열을 치환 문자열로 모두 바꾸어 줍니다. @param strOrg 원본 문자열 @param strFind 찾을 문자열 @param strReplace 치환 문자열 @return 반환값 없음. */ void ReplaceString(string& strOrg, string strFind, string strReplace) { size_t i = 0; i = strOrg.find(strFind); while ( TRUE ) { strOrg.replace(i, strFind.size(),..

프로그래밍 2008.06.17

new와 delete 연산자.

김윤수님의 블로그에서 실수하기 쉬운 new와 delete, new [], delete [] 연산사에 대한 글을 보았습니다. new [] 를 통하여 할당한 배열의 개수가 따로 저장이 되어 있고, 이를 모두 소멸시키기 위해서는 반드시 delete []를 사용해야 하겠습니다. 연관된 글을 읽다 보니, 동일한 객체를 여러 개 생성 / 소멸하는 경우에는 new, delete 연산자를 오버로딩하여 직접 메모리를 관리함으로써 성능을 높일 수 있다고 합니다. 결론적으로 new / delete, new [] / delete [] 쌍을 맞추어 프로그래밍해야 겠네요.

프로그래밍 2008.06.16

VC++에서 델파이의 ForceDirectories 함수 흉내내기

경로 내부의 디렉토리를 자동으로 생성해 주는 함수를 작성해 보았습니다. 델파이의 ForceDirectories 함수와 동일한 동작을 합니다. 아래 코드입니다. /** @brief 입력한 경로에 해당하는 디렉토리를 경로를 따라가며 모두 생성합니다.(델파이의 ForceDirectories 함수와 같음) @param lpszPath 디렉토리를 생성할 디렉토리 경로 @param nPathLength 경로의 길이 @return 성공하면 true, 실패하면 false를 반환합니다. */ BOOL ForceDirectories(LPCTSTR lpszPath, int nPathLength) { try { int i = 0; char* szDirName = new char[nPathLength + 1]; char* ps..

프로그래밍 2008.06.16

fps 로 현재 게임의 상태를 알아보자.

디아블로를 하던 중에 /fps 를 입력하면 상단에 다음과 같은 정보가 표시됩니다. 218 FPS 0 skip Ping : 181 video: glide Phys : 247/512m page : 199/1249m - FPS : 초당 표현할 수 있는 프레임 속도 - SKIP : 표현하지 못하고 넘어가는 프레임의 수 - PING : 자신의 P.C에서 서버간의 데이터가 피드백 되어 돌아오는 속도(데이터 왕복시간) - Phys : 시스템 램 용량 예) 247 \\\ 512m 디아2가 차지하고 있는 램 용량 \\\ 시스템에 부착되어 있는 램 용량 - Page : 가상메모리 예) 199 \\\ 1249mm 디아2가 차지하고 있는 가상 램 용량 \\\ c:\에 있는 pagefile.sys(가상메모리) 파일 용량 + 자..

게임/Diablo II 2008.06.12

임시테이블의 OBJECT_ID 얻기

OBJECT_ID 함수를 이용하여 해당 테이블이 존재하는지 여부를 검사할 때 다음과 같이 사용하게 됩니다. IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'MY_TABLE') AND type in (N'U')) -- 'MY_TABLE' 테이블이 존재함. 하지만, 임시 테이블의 존재 여부를 검사할 때는 그냥 위와 같이 하면 테이블을 100% 찾을 수 없다고 나옵니다. 임시 테이블은 TEMPDB에 생성되므로 그곳에서 테이블에 대한 OBJECT_ID를 얻어와야 합니다. 따라서 다음과 같이 코드를 수정해야만 합니다. IF EXISTS (SELECT * FROM tempdb.sys.objects WHERE object_id = OBJECT_I..

DB/MS-SQL 2008.06.10

doxygen 사용시 Error opening map file class_xxx.map for inclusion in the docs! 오류 대처

열심시 doxygen과 Graphviz를 이용하여 문서화를 하던중에 Error opening map file class_xxx.map for inclusion in the docs!와 같은 오류를 만나며 이미지가 나와야 할 부분에 이미지가 제대로 나타나지 않는 문제가 발생하였습니다. 구글에서 검색해본 결과... 간 파일명을 제대로 처리하지 못하여 발생하는 문제라는 것을 알게 되었습니다. 옵션 파일에서 같단하게 [ SHORT_NAMES = YES ]로 처리하면 오류없이 이미지까지 제대로 생성이 되었습니다.

프로그래밍 2008.05.28

warning C4996: 'strcat': This function or variable may be unsafe

VS 2005로 개발하던 중에 다음과 같은 오류를 만났습니다. 경고 2 warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\project\test.cpp 49strcpy, strcat 등의 함수가 버퍼 오버 플로우 공격에 취약하기 때문에 좀더 안전하게 strcpy_s, strcat_s 류의 함수를 사용하라는 권고 메시지더군요. 그런데, 권장하는 _s 함수로 변경하려면, 매개변수가 틀려서 코드 전체를 바꾸어야 하기 때문에 매우 번거롭..

프로그래밍 2008.05.23

개발자가 팀장이 된다는것은....

제임스님의 "훌륭한 엔지니어가 좋은 팀장이 되기 어려운 이유"라는 글을 보았습니다. 매우 공감이 갔습니다. 현재 저도 팀장의 직함을 갖고 있고, 많지는 않지만 팀원을 이끌어 나가는 위치에 있습니다. 저도 팀원의 느린 개발 속도에는 속이 터지더군요. 그래서 방법을 가르치는데도 자꾸 언성을 높이게 되고... 흠... 이러면 안되지 하면서도 잘안되더군요. 그냥 속편하게 차라리 내가 하고 말까하는 생각도 듭니다만, 당장 제코가 석자라 그러지도 못하는 처지라... 마찬가지로 칭찬하는 것도 쉽지 않더군요. 잘한 것에 대해서는 칭찬과 힘든 일에 대해서는 격려로 기운을 북돋아 주고, 외풍을 막아주는 담벼락 역할까지... 정말 쉽지 않더군요... 개발자로써의 개발 능력이나, 신기술에 대한 트랜드를 따라가는 것도 벅찬 마..

프로젝트관리 2008.05.23

Flex 교육 요약[5/16]

Action Script 3.0 학습에 도움이 되는 팁 : http://www.adobe.com/kr/devnet/actionscript/articles/actionscript_tips.html Air Download : http://labs.adobe.com/downloads/air.html 나이키 Air : http://lab.emotion.co.kr/nikeonair/ 참고 사이트 : http://www.yourminis.com/ 차트 데모 : http://demo.quietlyscheming.com/ChartSampler/app.html Adobe Flex 2 컴포넌트 데모 : http://examples.adobe.com/flex2/inproduct/sdk/explorer/explorer.htm..

프로그래밍 2008.05.16
728x90