'개발자 팁'에 해당되는 글 65건

  1. 2013.06.27 게임 소프트웨어 제작 및 개발 프로세스 UML도표
  2. 2011.10.26 게임 개발팀의 운영 형태 (직원,스튜디오,독립채산팀) (1)
  3. 2011.09.22 Visual Studio 2008 프로젝트(vcproj)를 2005 로 다운그레이드 변경 방법
  4. 2011.03.04 최대동접 6000명 온라인 네트워크 게임 서비스의 MRTG 트래픽(사용량) 공개 (2)
  5. 2010.12.08 STL의 random_shuffle을 이용하여 일반 배열을 무작위로 랜담하게 만드는 방법 (1)
  6. 2010.08.24 컴파일과 빌드 속도 향상을 위한 프로그래머의 필수 하드웨어 SSD 메모리 하드 디스크(HDD) (3)
  7. 2010.05.14 실무에서 사용한 Star UML Diagrams(UML다이어그램)
  8. 2010.02.12 Preforce Merge(P4Merge), KDiff3 + TortoiseSVN사용방법
  9. 2009.12.08 테트리스(Tetris) 독점과 게임, 소프트웨어의 특허, 저작권 (3)
  10. 2009.07.01 바둑이 뷰어, 포커 뷰어 제작 방법 및 원리 (2)
  11. 2009.03.19 Tortoise SVN 캐시 조절을 통한 하드디스크 부하 감소, 속도향상 (1)
  12. 2009.02.27 터틀스 SVN(TortoiseSVN) 속도 향상 방법 :: 소스세이프 보다 좋은 소스 코드 버전관리 툴
  13. 2008.11.25 show processlist, kill 127909137 :: MySql 활성화 프로세스 및 제거
  14. 2008.11.12 Visual Studio 에디터를 분할하여 코드를 작성하는 방법
  15. 2008.10.16 바탕화면 보기 프로그램 소스코드
  16. 2008.10.10 매우 큰 숫자의 INT64 자료형을 문자열로 변환하는 방법 :: PHP (1)
  17. 2008.09.25 서버 프로그램에서 timeGetTime() 함수 사용시 안전한 49.71일 처리
  18. 2008.09.23 인스톨쉴드, NSIS로 만든 인스톨이 프로그램 추가/제거에 크기(용량)이 크게 나올 경우
  19. 2008.09.09 Tortoise SVN :: 소스세이프(Source Safe)보다 좋은 버전관리 프로그램
  20. 2008.07.31 윈도우 2003 서버 컴퓨터의 네트워크 링크가 분리되거나 끊어져 있을 경우
  21. 2008.07.17 마메 (MAME) 소스코드 공개 (1)
  22. 2008.06.20 Visual Studio 가 실행되거나, 종료되지 않을 경우(켜지지도 않고 꺼지지도 않을 경우)
  23. 2008.06.13 Visual Studio파일 익스플러러&프로젝트 Explorer 탐색기 (1)
  24. 2008.06.11 Visual Studio 2005 코드의 변경, 저장 여부 저장을 확인
  25. 2008.06.09 SVC, Tortoise SVN, 소스세이프(Source Safe)를 활용한 로그보기, 업데이트된 곳 찾기, Diff
  26. 2008.04.16 상용 서버 프로그램(데몬, Demon)의 UI 디자인에 대해서…
  27. 2008.04.11 서버 프로그램 개발, 프로그래머, 라이블러리, 게임 네트워크 엔진 외주 관련 문서
  28. 2008.04.03 게임 서버 다운 현상 발생시 대처방법 (1)
  29. 2008.03.27 주말인지 무슨 요일인지 검사하는 소스 코드 :: localtime tm_wday
  30. 2008.03.21 게시판과 PDB 파일을 이용한 프로그램 오류, 콜스텍(Call Stack) 자동 등록(신고) 시스템

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

누리게임즈에서 사용중인 게임 소프트웨어를 개발하기 위한 프로세스 UML도표 입니다.

 

모든 게임의 개발은 사람이 하는 것이기 때문에 항상 변화가 필요 하지만 룰을 만들어 지키고자 노력하면 더욱 체계적이고, 즐거운 개발환경을 유지 할 수 있습니다.

 

 

간단한 게임 제작 프로세스

 

 

조금은 더 복잡한 게임 개발 프로세스

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

게임 개발 회사에서는 여러 가지 방법으로 게임 개발팀을 운영하고 있습니다.

 

각각의 방법마다 장단점이 존재하여 팀을 운영하시는 회사에서 어떠한 방법이 좋은지 신중하게 판단하여 운영하시면 많은 도움이 될 것입니다.

 

그럼 게임 개발팀의 운영 형태에 대하여 설명 드립니다.

 

 

게임 개발팀의 운영 형태

 

게임 개발팀의 운영 형태

 

작성자 : 채경석 http://a.tk.co.kr

 

- 직원

일반적인 게임팀의 모든 개발 체계를 회사에서 관여하고 비용을 지불하며 게임 개발에 대한 모든 책임을 회사가 지는 안정적이고 관리적인 형태.

 

- 스튜디오..

회사에서 게임팀의 모든 비용을 부담하지만 게임팀의 독립적인 개발을 보장하고 수익의 일부분을 보너스 등으로 할당하는 방법으로 창의적이고 독립적인 형태

 

- 독립 채산제(팀)

회사 내 독립적으로 운영되는 팀으로 회사에서 초기 비용을 지불하지만 이후 개발에 필요한 모든 비용을 개발팀에서 부담하고 수익을 회사와 나누어 비용을 차감하고 수익을 취하는 형태

 

 

직원

스튜디오

독립 채산 팀

인사 권한

회사 전담

회사 조율

팀 전담

초기 자금

없음

없음

회사 부담

수익

회사 수익

회사 수익

수익쉐어(초기 결정)

월급 및 비용

회사 부담

회사 부담

직접 부담

보너스 (비율)

회사 결정(낮음)

회사 결정(중간)

팀 결정(높음)

팀장 대우

회사 결정

회사 조율

팀 결정

손해의 책임

회사 책임(부담)

회사 책임(부담)

팀 책임(부담)

회사의 역할

모든 관리

개발의 방향성 및 프로젝트를 결정을 하고 서비스를 한다.

경영 및 서비스 영업 등을 지원한다.

주의 사항

회사의 관여가 많을 경우 독창적인 게임이 나올 가능성이 적어 진다. 직원들의 무사안일주의

팀장의 역할에 따라서 수익성이 '0' 인 팀이 존재할 수 있어 회사에서 비용 부담이 커진다.

정확한 기준(비용/수익/쉐어의 계산) 없이 실행된다면 상호 불신과 단기적인 성과에만 집중하여 조직 문화에 혼란을 초래할 수도 있음

 

 


: 댓글 1             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

Visual Studio 2008 에서 개발된 프로젝트(vcproj)를 Visual Studio 2005 에서에서 열 수 있도록 다운그레이드하는 방법을 소개해 드립니다.

 

 

 

방법

 

프로젝트 파일(.vcproj) 을 노트패드로 열어

아래와 같이 Version="9.00" 을 Version="8.00" 으로

변경하면 됩니다.

 

 

변경전 비주얼 스튜디오 2008 프로젝트..

 

<?xml version="1.0" encoding="ks_c_5601-1987"?>

<VisualStudioProject

    ProjectType="Visual C++"

    Version="9.00"

    Name="Box2D"

    ProjectGUID="{3F022F98-1A0F-4DB7-B0E0-7D74C4D8EB91}"

    RootNamespace="Box2D"

    Keyword="MFCProj"

    >

 

 

비주얼 스튜디오 2005 프로젝트로 변경후

 

<?xml version="1.0" encoding="ks_c_5601-1987"?>

<VisualStudioProject

    ProjectType="Visual C++"

    Version="8.00"

    Name="Box2D"

    ProjectGUID="{3F022F98-1A0F-4DB7-B0E0-7D74C4D8EB91}"

    RootNamespace="Box2D"

    Keyword="MFCProj"

    >


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

저희가 서비스중인 최대 동접 6000명인 온라인 네트워크 게임 서비스MRTG 트래픽(사용량) 공개해드립니다.

 

참고로 아래 트래픽은 티케이게임( www.tk.co.kr ) 및 아이폰, 안드로이드 클럽 맞고, 포커, 해외 온라인 게임 등에 사용된 트래픽입니다.

 

이것을 기초로 참고하시어 게임 서버를 구성하실 경우 어느 정도의 네트워크 부하를 사용할지 추측이 가능하며 IDC 센터 선정에 도움이 되시기를 바랍니다.

 

 

서비스 중인 게임 목록

 

    "클럽맞고",        

    "클럽채팅",        

    "포즐온라인",        

    "배드볼",        

    "클럽포커",        

    "클럽고스톱",        

    "메가워드",        

    "파인소프트",        

    "서치아이",        

    "클럽바둑이",        

    "클럽홀덤",        

    "클럽섯다",        

 

    "스마트폰 빙고",        해외게임

    "스마트폰 솔리테르",        해외게임

 

    "스마트폰 클럽맞고",        

    "스마트폰 클럽포커",        

    "스마트폰 클럽고스톱",        

 

    "스마트폰 빙고시티",        해외게임

 

 

게임서버의 네트워크 트래픽(TRAFFIC) 사용량

 

최대 약 9메가 바이트 사용..

 

 

 

홈페이지 및 DB, 패치(업데이트) 서버의 네트워크 트래픽 사용량

 

최대 약 8메가 바이트 사용

 

 


: 댓글 2             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

STL의 random_shuffle을 이용하여 vector 이나 list 가 아닌 일반 배열을 무작위로 랜덤하게 만드는 방법을 설명 드립니다.

 

 

일반 배열을 랜덤하게 섞는 소스코드

 

아래 소스코드와 같이 배열의 시작과 배열의 마지막 값 포인터를 인자로 하면 무작위로 값이 섞이게 되어있습니다.

 

소스코드

    BYTE m_Ball[ 10 ];

 

    // 볼을뒤섞는다.

    for( int i = 0; i < 10; i++ )

    {

        m_Ball[i] = i+1;

    }

 

    random_shuffle( m_Ball, m_Ball + 10 );

 

    // 볼을검증한다.

    for( int i = 0; i < 10 ; i++ )

    {

        static int nTrace = 0;

        TRACE( "%s(%d) : nTrace = %d \n" , __FILE__, __LINE__, m_Ball[i] );

    }

 

 

결과값

: nTrace = 9

: nTrace = 2

: nTrace = 10

: nTrace = 3

: nTrace = 1

: nTrace = 6

: nTrace = 8

: nTrace = 4

: nTrace = 5

: nTrace = 7


: 댓글 1             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

프로그래밍 특히 Visual Studio 을 사용하다 보면 CPU 의 성능이 남아있음에도 불구하고 하드디스크(HDD) 의 지연 현상으로 컴파일 및 빌드 속도가 매우 느립니다.

 

저 역시 그와 같은 현상 때문에 이번에 SSD 로 작업 드라이브로 변경하였는데 매우 만족하는 성능 향상을 볼 수 있습니다.

 

참고로 제가 사용하는 하드웨어의 주요 스팩은 아래와 같습니다.

2.66 -> 3.xx Intel 4 CPU

4G 램 (RAM)

SSD 1개, HDD 2개

 

여유가 된다면 운영체계가 설치된 C 드라이브도 SSD 로 바꾸면 좋겠네요.

 

참고 : Visual Studio 듀얼코어, 쿼드코어 CPU 활용한 컴파일(빌드) 속도 향상방법

 

 

 

이번에 구매한 작업용 삼성전자 MMCRE64G5MXP SSD

 

 

 

프로그래미 컴파일 시 쿼드코어 4 CPU를 모두 사용하는 모습

 

아래와 같이 SSD를 사용할 경우 Visual C++ 의 컴파일을 모든 4개의 CPU의 성능을 사용함을 알 수 있습니다.

 

 

 

하드 성능 HDTune

 

무엇보다 억세스(Access) 속도와 부스트 레이트(Burst Rate) 가 최고네요.

 

삼성전자 MMCRE64G5MXP SSD 하드 성능

 

 

 

명정보기술 MITS2120GS3-M (120GB) SSD 하드 성능

 


: 댓글 3             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

UML이란 프로그램 제작, 기획, 개발에서 자신의 생각을 보기 좋게 정리하는 기술과 규칙입니다.

 

제 경험과 생각으로는 UML 은 단순한 방법론이고 생각을 정리하는 도구이기 때문에 규칙을 반드시 따르거나 할 필요가 없다고 생각합니다.

 

따라서 그것의 문법에 억매이지 말고, 자유롭게 자신의 생각을 정리하고, 다른 사람과 쉽게 공유할 수 있는 것으로 단순한 도구로써 습득을 하신다면 꼭 프로그램 개발이 아니라 다른 모든 곳에 활용할 수 있는 좋은 브레인 툴이 될 것입니다.

 

 

실무에서 사용한 UML Diagrams(UML다이어그램)의 예

 

(무료 프로그램 StarUML 사용)

 

UML Sequence Diagrams(시퀀스 다이어그램)

 

UML Component Diagrams(컴포넌트 다이어그램) 을 활용한 서버 구성도


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

프로그래밍 작업 시 유용한 외부 Preforce Merge(P4Merge) 툴을 TortoiseSVN에 등록하여 사용하는 방법을 설명 드립니다.

 

참고로 프로그래밍에서 소스 버전 관리 툴 ( SVN ) 및 Merge 사용은 몇 번을 강조하여 말해도 지나치지 않으니 프로그래머라면 반드시 사용하시기를 권장해 드립니다.

 

참고로 KDiff3는 별도의 설정없이 설치를 하면 자동으로 TortoiseSVN과 연결이 되니 더욱 편리하게 사용이 가능합니다.

 

 

방법

 

1. Preforce Merge(P4Merge) 다운로드 합니다.

 

http://www.perforce.com/perforce/downloads/index.html

 

 

2. Preforce Merge(P4Merge) 를 설치합니다..

 

주의할 점은 Merge 기능만 사용시 에는 옵션에서 P4Merge 만 설치하도록 합니다.

 

 

3. 아래와 같이 Diff , Merge 설정에 p4Merge 프로그램을 등록합니다.

 

Diff : "C:\Program Files\Perforce\p4merge.exe" %base %mine

Merge : C:\Program Files\KDiff3\kdiff3.exe %base %theirs %mine %merged

 

 

 

 

4. 설치를 완료하셨다면 아래와 같이 SVN 과 P4Merge 프로그램이 잘 결합된 모습을 볼 수 있습니다.

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

테트리스 (Tetris)는 한때 넷마블, 엠게임, 피망, 프리챌 등 거의 모든 게임 포털에서 서비스되었습니다.

 

하지만 현재 아쉽게도 다양한 게임 형태를 원하는 유저들의 요구사항을 충족하지 못하지만 한게임에서 독점으로 서비스 되고 있어 테트리스 유저들이 즐겁게 게임을 하고 있는데 대략 한국에서 온라인 서비스되던 모습을 추정해봅니다.

 

 

현재 한국에서 독점 서비스되는 사유

 

- 테트리스게임 자체에 특허권 및 저작권이 확실하다.

- 한국 내 라이선스비용이 매우 비싸다.

 

입니다.

 

 

생각해볼 문제

 

- 게임 소프트웨어의 저작권 특허권 문제

- 대기업의 유사 작품의 무작위 소송 등 횡포 (특허를 회피한 게임이라고 하더라도…)

- 게임, 소프트웨어의 아이디어는 보호 받아야 하는가?

- 알고리즘의 특허, 독점, 저작권 문제

 

참 어려운 문제이지요~ 개발자입장에서는 프로그램이 보호가 되어야 마땅하지만 선점한 업체들에 의하여 모방, 창조 등의 활동을 제약 받으면 그것 또한 문제라고 생각이 되네요.

 

 

테트리스의 스크린샷

 

넷마블 테트리스

 

엠게임 테트리스

 

구 한게임 테트리스

 

 

현 한게임 테트리스


: 댓글 3             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

바둑이, 포커 게임의 경우 겜블링 성격이 강하여 사행성 PC방이나 온라인 게임사이트에서 각광을 받고 있는 게임입니다.

 

최근 바둑이뷰어, 포커뷰어를 원하시는 분들이 많아서 제작 방법 및 원리를 고민해 보았는데 일반적으로는 다음과 같은 원리로 제작 및 개발이 되지 않을까 추정됩니다.

 

※ 해킹 및 크래킹, 바둑이 뷰어 개발은 불법으로 큰 처벌을 받을 수 있습니다.

※ 법에 의해 처벌을 받기 전에 형님들에게 손목 및 생명에 큰 봉변을 당할 수 있으므로 만들지도, 쓰지도 맙시다.


※ Kyuseo 는 어떠한 뷰어나 해킹 프로그램을 개발한 경험이 없고, 개발 하지도 않고, 만들줄도 모릅니다!!! (문의사절)

 

 

 

방법 1 – 패킷 스니퍼 , 네트워크 패킷 가로채기

 

클라라이언트와 서버의 네트워크 통신(패킷)을 검사하여 상대방 카드정보를 빼오는 방법입니다.

 

하지만 대부분의 게임 사이트에서는 당연하게도 상대방 카드정보를 다른 사람에게 발송하지 않기 때문에 최근에는 거의 효용성이 없습니다만 몇몇 사이트는 아직 가능합니다.

 

예상 순서도

1. 패킷 스니퍼로 패킷을 가로챈다.

2. 가로챈 패킷을 분석하여 상대방 카드 정보를 저장한다.

3. 저장된 상대방 카드 정보를 화면에 출력한다.

 

 

단점

- 서버에서 상대방 카드정보를 전송하지 않으면 불가능하다.

- 패킷이 암호화 되었을 경우 패킷 분석이 어렵다.

 

 

패킷 스니퍼로 가로챈 네트워크 패킷 정보

 

패킷 스니퍼의 모습

 

 

방법2 – 리버스 엔지니어링으로 클라이언트 메모리 해킹하기 ..

 

클라이언트와 서버의 네트워크 통신(패킷)을 검사하여 상대방 카드정보를 빼오는 방법은 패킷이 암호화 되었을 경우 분석이 어렵기 때문에 클라이언트의 메모리에 저장된 정보를 해킹하여 상대방 카드정보를 빼오는 방법입니다.

 

역시 대부분의 게임 사이트에서는 당연하게도 상대방 카드정보를 다른 사람에게 발송하지 않기 때문에 최근에는 거의 효용성이 없습니다만 몇몇 사이트는 아직 가능합니다.

 

예상 순서도

1. 메모리 해킹 툴을 이용하여 상대방 카드정보가 들어있는 메모리를 검사한다. (노가다!!!)

2. 저장된 메모리를 분석하여 상대방 카드 정보를 화면에 출력한다.

 

 

단점

- 서버에서 상대방 카드정보를 전송하지 않으면 불가능하다.

- 클라이언트에 상대방 카드정보가 저장되지 않으면 불가능하다.

 

 

방법3 – 해킹 프로그램을 상대방 컴퓨터에 설치하기

 

해킹 프로그램을 상대방 컴퓨터에 설치하여 상대방 카드정보를 빼오는 방법입니다. 가장 확실한 방법이지만 하드웨어적인 수고가 들어갑니다. PC방 가맹점등에서 이용하기 좋은 솔루션입니다.

 

예상 순서도

1. 모든 PC에 해킹 / 크래킹 프로그램을 설치한다.

2. 설치된 컴퓨터의 메모리 해킹 또는 네트워크 패킷을 분석하여 정보를 서버로 발송한다.

2. 일정시간마다 설치된 컴퓨터의 화면을 캡쳐하여 정보를 서버로 발송한다.

3. 서버에서 모든 유저의 카드정보를 확인 가능하다.

 

 

단점

- 모든 PC에 직접 설치를 해야 함

 

- 서버 & 클라이언트 구조로 프로그래밍 양이 늘어남.

 


: 댓글 2             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

Tortoise SVN은 매우 유용한 소스 파일 버전관리 유틸리티 프로그램입니다.

 

하지만 잦은 하드디스크 액세스로 컴퓨터의 전반적인 성능저하를 나타나게 하는데 Tortoise SVN 옵션에서 캐시 조절을 통하여 하드디스크 부하 감소, 속도향상을 하는 방법을 설명해드립니다.

 

 

캐시 감소 방법

 

1. SVN 설정을 실행합니다.

 

 

 

2. 아이콘 오버레이로 이동하여 제외경로에 포함경로를 설정합니다.

 

- 일반적으로 제외경로는 루트(Root) 디렉토리를…

C:\*

D:\*

E:\*

F:\*

 

- 포함경로는 프로젝트 경로를 설정합니다.

D:\FungrepGraphic\*

D:\FungrepDesign\*

D:\FungrepHomepage\*

D:\FungrepProject\*

D:\PMangoEngine\*

D:\SkySoftProject\*

 

 

 

3. TSNCCache.exe 를 강제 종료하거나 윈도우를 재시작하면 완료됩니다.

 


: 댓글 1             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

터틀스 SVN 을 약 3년간 사용하면서 소스세이프보다 매우 만족하면서 사용을 하였습니다.

 

하지만 최대의 문제점은 잦은 하드 디스크 엑세스로 인한 전체적인 컴퓨터 성능의 저하로 불편함을 느꼈는데 이것을 조금이나마 해소할 수 있는 터틀스 SVN(TortoiseSVN) 속도 향상 방법에 대하여 소개해드립니다.

 

 

로그캐싱을 중단한다 .

 

설정 -> 로그캐싱 ->로그캐싱사용 불가로 설정

 

로그 보기의 속도가 느려지기는 하지만 하드 엑세스를 하지 않아 전반적인 성능이 올라갑니다.

(Kyuseo 가 추천합니다.)

 

 

 

아이콘 상태 캐시를 중단한다 .

 

설정 -> 아이콘 오버레이 -> 상태캐시 없음으로 설정

 

아이콘 자동 갱신을 사용하지 않아 상태 표시가 어렵기는 하지만 하지만 하드 엑세스를 하지 않아 전반적인 성능이 올라갑니다.

(개인적으로는 추천하지 않습니다.)

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

MySql에서 활성화된 프로세스의 정보를 보는 / 제거하는 명령어(함수)를 알려드립니다.

 

 

MySql 프로세스 명령어 (함수)

 

show processlist

: 활성화된 프로세스 목록을 나열한다.

 

kill 127909137

: 해당 아이디의 프로세스를 제거한다.

 

 

실행 모습

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

Visual Studio 에디터를 분할하여 코드를 작성하는 방법을 설명해드립니다.

 

이와 같은 코딩 기법은 비슷하면서 틀린 2개의 코드를 서로 비교하면서 작성하거나, 서로 참고할 프로그래밍 내용들을 비교하는데 큰 효과가 있습니다.

 

 

방법

 

1. 우측 상단의 막대기(?)를 클릭하여 위치를 조정합니다.

 

 

2. 분할된 2개의 화면으로 코드를 작성합니다.


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

바탕화면 보기를 할 수 있는 프로그램 소스코드를 공개합니다.

 

 

 

소스코드

 

    // 바탕화면보기만들기...

    CString str =

    "[Shell] \r\n"

    "Command=2 \r\n"

    "IconFile=explorer.exe,3 \r\n"

    "[Taskbar] \r\n"

    "Command=ToggleDesktop \r\n";

    

    // 파일에 기록한다. ..

    CPFile::WriteString( "desk.scf", str );

 

    // 바탕화면보기를실행한다.

    ShellExecute( m_hWnd, "", "desk.scf", NULL, NULL, SW_SHOWNORMAL );

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

PHP 에서 INT64 자료형의 매우 큰 숫자 (예: 1조)를 다양한 문자열로 변환하여 출력하는 방법을 설명해드립니다.

 

PHP 에서 매우 큰 숫자(1000000000000, 1조)를 출력하면 1E+012 와 같이 출력이 됩니다.

 

이와 같이 출력되는 숫자가 1000000000000 또는 1,000,000,000,000으로 출력하는 방법을 설명해드립니다.

 

 

코드

 

    $plus_money = 1*1000000000000; // 1조

 

    $a0 = $plus_money;

    echo( $a0. "<br>" ); // 1E+012

    

    $a1 = sprintf( "%.0f", $plus_money );

    echo( $a1 . "<br>" ); // 1000000000000

 

    $a2 = number_format( $plus_money );

    echo( $a2 . "<br>" ); // 1,000,000,000,000

 

 

결과

 

 

 


: 댓글 1             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

서버 프로그램 및 안정성 높은 프로그램 개발할 경우 timeGetTime() 함수 사용방법에 대한 주의 사항을 알려드립니다.

 

근본적으로 timeGetTime() 함수는 milliseconds 단위로 DWORD 자료형을 리턴하는 함수입니다. 하지만 자료형의 한계 및 함수 특성상 컴퓨터가 켜진 이후 49.71일 이 경과되면 다시 0으로 초기화 되는 현상이 발생됩니다.

 

따라서 서버 프로그램과 같이 장시간 서비스가 되는 소프트웨어를 개발할 경우에는 가급적 timeGetTime() 함수를 사용하지 않거나 변수 오버플로우를 처리해야 합니다.

(개인적으로는 1초 단위를 리턴하는 time() 함수를 많이 사용합니다.)

 

안정성이 생명인 게임 서버 프로그램의 모습

 

 

 

오류를 제어하지 않는 코드의 예

 

    DWORD dwCurrentTime = timeGetTime();

 

    DWORD dwDiff = dwCurrentTime - m_dwStart; // dwDiff 값은 경우에 따라서 음수 ( - ) 가 되거나 DWORD 자료형을 초과할 수 있다    

    

    // 49.71일처리...

    if( dwCurrentTime < m_dwStart )

    {

        return 0;

    }

 

 

오류를 제어한 코드의 예

 

    DWORD dwCurrentTime = timeGetTime();

 

    DWORD dwDiff = dwCurrentTime - m_dwStart; // dwDiff 값은 경우에 따라서 음수 ( - ) 가 되거나 DWORD 자료형을 초과할 수 있다

      

    // 49.71일처리...

    if( dwCurrentTime < m_dwStart )

    {

        // 오버 플로우된 변수값을 적절히 처리한다.

        m_dwStart = 0;

        dwDiff = 0;

    }

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

인스톨쉴드(InstallShield), NSIS로 만든 인스톨 프로그램이 프로그램 추가/제거에 크기(용량)이 크게 나올 경우 해결 방법을 알려드립니다.

 

실제 설치된 프로그램의 디렉터리 파일 크기보다 너무 크게 보이는 모습

 

 

올바르게 크기가 나오는 모습

 

 

 

원인

 

문제의 핵심은 레지스트리 키 값에 클럽맞고 와 같이 한글이 포함된 것이 문제였습니다.

 

한글로 만들어진 키값이 모습

 

 

 

해결방법

 

따라서 인스톨 프로그램 개발 시 아래와 같이 영어로만 키값을 만들면 해결됩니다.

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

 

소스세이프(Source Safe)보다 좋은 버전관리 프로그램 Tortoise SVN 을 소개해드립니다.

 

홈페이지 : http://tortoisesvn.net/

 

 

버전관리를 통한 소스 관리의 중요성

 

프로그래머, 개발자라면 반드시 소스의 버전관리를 해야 합니다. (선택이 아니라 필수입니다.)

 

소스관리 소프트웨어를 사용하는 대표적인 이유는 다음과 같습니다.

 

- 백업

- 팀 프로젝트 (팀원과 공통 소스 개발)

- 잘못 만들어진 소스 복구

 

 

저(Kyuseo) 역시 예전에는 MS 사의 소스세이프(Source Safe)를 10년 가까이 사용하였으나 최근 3년간 Tortoise SVN을 사용해본 결과 이제는 소스세이프를 사용하는 프로젝트는 손까락도 대기 싫습니다. 업무 효율상 20%~30% 이상 이득을 보았다고 생각합니다.

 

특히 프로그래머, 팀장님들은 꼭!!! SVN 을 적극 활용하시기를 권해드립니다.

 

 

tortoise( 터틀스, 거북이) SVN 을 사용해야하는 이유

 

- 2명 이상의 작업자가 코드 수정이 가능

- 지능적인 자동 Marge

- 무료 공개 소스 프로그램

- 지속적인 업데이트

- 한글 지원

- 탐색기 기반

- 모든 프로그램 호환 (소스코드 뿐만이 아니라 그래픽, 기획자도 사용하기 편리함)

- 프로그램의 안정성

- 세세한 옵션 조정 가능

- 전폭적인 업데이트 로그 관리

 

 

스크린샷

 

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

네트워크의 안정성이 최우선인 윈도우 2003 서버 컴퓨터에서 별다른 이유 없이 네트워크 링크가 분리되거나 끊어져 있을 경우 해결책을 알려드립니다.

 

 

오류발생 서버 사양

 

네트워크 어댑터:

 

Intel(R) PRO/1000 EB Network Connection with I/O Acceleration

 

 

 

서버 컴퓨터 :

 

SmartServer ZSS-132Q 73GB SAS(1.86GHz)

Processor

Intel Quad Core Xeon Clovertown 1.86GHz / 8MB (FSB 1066MHz)

RAM

1 GB ECC Registered DDR2 533 FBDIMM Memory

HDD

73GB 15000rpm SAS HDD Disk

 

 

 

운영체계는 다음과 같습니다.

 

Windows Server 2003 SP2

 

 

증상

 

이벤트 로그의 기록으로 다음과 같은 증상이 발생하고 네트워크가 끊어졌다가 잠시 후 다시 연결됩니다.

 

1. \DEVICE\{5A8E93F0-254D-40F3-B890-xxxxxxxxxxx} 링크가 분리되었습니다.

 

 

 

2. \DEVICE\TCPIP_{5A8E93F0-254D-40F3-B890-XXXXXXXXXXXX} 네트워크 어댑터가 네트워크에서 연결이 끊어져 있는 것을 시스템이 검색했으며, 어댑터의 네트워크 구성이 해제되었습니다. 네트워크 어댑터가 연결이 끊어졌으면 오동작을 한다는 것을 가리킵니다. 업데이트된 드라이버에 대해 공급업체에 문의하십시오.

 

 

 

3. 마스터 브라우저가 멈추어져서 브라우저는 네트워크 \Device\NetBT_Tcpip_{5A8E93F0-254D-40F3-B890-xxxxxxxxxx}에서 선택하도록 했습니다.

 

 

 

해결방법

 

방법1. RegEdit 를 이용하여 아래 레지스트리 값을 0 으로 변경합니다.

 

 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]

"EnableTCPA"=dword:00000000

"EnableRSS"=dword:00000000

"EnableTCPChimney"=dword:00000000

 

"SynAttackProtect" =dword:00000000

 

 

KB948496 를 설치한다.

 

http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=062E954C-FDEC-45AF-A09C-5A05B8F010A5&displaylang=ko

 

 

 

방법 2. Windows 2003 SP2 를 SP1으로 다운 그레이드 합니다.

 

이 방법은 추천하지 않습니다.

 

 

방법 3. 네트워크 카드를 Intel 이 아닌 다른 계열로 변경한다.

 

이 방법은 추천하지 않습니다.

 

 

방법 4. 네트워크 카드의 하드웨어 가속을 모두 제거한다.

 

 

방법 5. 네트워크 카드의 하드웨어 드라이버를 다른 버전으로 변경한다.

 

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

인터넷 서핑 도중 마메 (MAME) 소스코드가 공개된 사이트가 있어서 링크 해드립니다.

 

MAME Source Code

 

링크 : http://mamedev.org/source/src/index.html

 

아래 코드를 보면 알겠지만 원본 소스코드 그대로 이네요.

 

모두 다 저작권이 있을 텐데 어떻게 공개가 되었는지 궁금하네요.

 

지저분해질 수 밖에 없는 C코드인데 정말 깔끔하게 잘 짰네요.

 

 

1943 및 텐가이등 각종 Psikyo 소스 코드 중 일부

 

아래코드를 보면 알겠지만 코드를 하나 작성하여 1943, 사무라이 에이스, 1945 스트라이커스, 텐가이 등 여러 코드에서 재활용하여 사용하였네요.

 

http://mamedev.org/source/src/mame/drivers/psikyo.c.html

1  /***************************************************************************

    2  

    3                              -= Psikyo Games =-

    4  

    5                  driver by   Luca Elia (l.elia@tin.it)

    6  

    7  

    8  CPU:    68EC020 + PIC16C57 [Optional MCU]

    9  

   10  Sound:  Z80A                +   YM2610

   11     Or:  LZ8420M (Z80 core)  +   YMF286-K (YM2610 compatible)

   12  

   13  Chips:  PS2001B

   14          PS3103

   15          PS3204

   16          PS3305

   17  

   18  ---------------------------------------------------------------------------

   19  Name                    Year    Board          Notes

   20  ---------------------------------------------------------------------------

   21  Sengoku Ace         (J) 1993    SH201B

   22  Gun Bird            (J) 1994    KA302C

   23  Battle K-Road       (J) 1994    ""

   24  Strikers 1945       (J) 1995    SH403/SH404    SH403 is similiar to KA302C

   25  Tengai              (J) 1996    SH404          SH404 has MCU, ymf278-b for sound and gfx banking

   26  ---------------------------------------------------------------------------

   27  

   28  To Do:

   29  

   30  - Flip Screen support

   31  

   32  ***************************************************************************/
										

   33  

   34  /***** Gun Bird Japan Crash Notes

   35  

   36  The Following Section of Code in Gunbird causes reads from the

   37  0x080000 - 0x0fffff region

   38  

   39  002894: E2817000           asr.l   #1, D1

   40  002896: 70001030           moveq   #$0, D0

   41  002898: 10301804           move.b  ($4,A0,D1.l), D0   <-- *

   42  00289C: 60183202           bra     28b6

   43  00289E: 3202C2C7           move.w  D2, D1

   44  0028A0: C2C77000           mulu.w  D7, D1

   45  0028A2: 70003005           moveq   #$0, D0

   46  0028A4: 3005D280           move.w  D5, D0

   47  0028A6: D280E281           add.l   D0, D1

   48  0028A8: E2812071           asr.l   #1, D1

   49  0028AA: 20713515           movea.l ([A1],D3.w*4), A0

   50  0028AE: 70001030           moveq   #$0, D0

   51  0028B0: 10301804           move.b  ($4,A0,D1.l), D0   <-- *

   52  0028B4: E880720F           asr.l   #4, D0

   53  0028B6: 720FC041           moveq   #$f, D1

   54  

   55  This causes Gunbird to crash if the ROM Region Size

   56  allocated during loading is smaller than the SMH_ROM

   57  region as it trys to read beyond the allocated rom region

   58  

   59  This was pointed out by Bart Puype

   60  

   61  *****/
										

   62  

   63  #include
										"driver.h"
										

   64  #include
										"sound/2610intf.h"
										

   65  #include
										"sound/ymf278b.h"
										

   66  

   67  

   68  /* Variables defined in video */
										

   69  

   70  extern UINT32 *psikyo_vram_0, *psikyo_vram_1, *psikyo_vregs;

   71  extern
										int psikyo_ka302c_banking;

   72  

   73  /* Functions defined in video */
										

   74  

   75  WRITE32_HANDLER( psikyo_vram_0_w );

   76  WRITE32_HANDLER( psikyo_vram_1_w );

   77  

   78  VIDEO_START( psikyo );

   79  VIDEO_EOF( psikyo );

   80  VIDEO_UPDATE( psikyo );

   81  

   82  extern
										void psikyo_switch_banks( int tmap, int bank );

   83  

   84  /* Variables only used here */
										

   85  

   86  static UINT8 psikyo_soundlatch;

   87  static
										int z80_nmi, mcu_status;

   88  

   89  static MACHINE_RESET( psikyo )

   90  {

   91      z80_nmi = mcu_status = 0;

   92  }

   93  

   94  

   95  /***************************************************************************

   96  

   97  

   98                                  Main CPU

   99  

  100  

  101  ***************************************************************************/
										

  102  

  103  static
										int psikyo_readcoinport(running_machine *machine, int has_mcu)

  104  {

  105      int ret = input_port_read(machine, "COIN") & ~0x84;

  106  

  107      if (has_mcu)

  108      {

  109          /* Don't know exactly what this bit is, but s1945 and tengai

  110             both spin waiting for it to go low during POST.  Also,

  111             the following code in tengai (don't know where or if it is

  112             reached) waits for it to pulse:

  113  

  114             01A546:  move.b  (A2), D0    ; A2 = $c00003

  115             01A548:  andi.b  #$4, D0

  116             01A54C:  beq     $1a546

  117             01A54E:  move.b  (A2), D0

  118             01A550:  andi.b  #$4, D0

  119             01A554:  bne     $1a54e

  120  

  121             Interestingly, s1945jn has the code that spins on this bit,

  122             but said code is never reached.  Prototype? */
										

  123          if (mcu_status) ret |= 0x04;

  124          mcu_status = !mcu_status;   /* hack */
										

  125      }

  126  

  127      if (z80_nmi)

  128      {

  129          ret |= 0x80;

  130  

  131          /* main CPU might be waiting for sound CPU to finish NMI,

  132             so set a timer to give sound CPU a chance to run */
										

  133          timer_call_after_resynch(NULL, 0, NULL);

  134  //      logerror("PC %06X - Read coin port during Z80 NMI\n", activecpu_get_pc());
										

  135      }

  136  

  137      return ret;

  138  }

  139  

  140  static READ32_HANDLER( sngkace_input_r )

  141  {

  142      switch(offset)

  143      {

  144          case 0x0:   return (input_port_read(machine, "IN0") << 16) | 0xffff;

  145          case 0x1:   return (input_port_read(machine, "DSW1") << 16) | input_port_read(machine, "DSW3");

  146          case 0x2:   return (psikyo_readcoinport(machine, 0) << 16) | input_port_read(machine, "DSW2");

  147          default:    logerror("PC %06X - Read input %02X !\n", activecpu_get_pc(), offset * 2);

  148                      return 0;

  149      }

  150  }

  151  

  152  static READ32_HANDLER( gunbird_input_r )

  153  {

  154      switch(offset)

  155      {

  156          case 0x0:   return (input_port_read(machine, "IN0") << 16) | psikyo_readcoinport(machine, 0);

  157          case 0x1:   return (input_port_read(machine, "DSW1") << 16) | input_port_read(machine, "DSW2");

  158          default:    logerror("PC %06X - Read input %02X !\n", activecpu_get_pc(), offset*2);

  159                      return 0;

  160      }

  161  }

  162  

  163  

  164  static TIMER_CALLBACK( psikyo_soundlatch_callback )

  165  {

  166      psikyo_soundlatch = param;

  167      cpunum_set_input_line(machine, 1, INPUT_LINE_NMI, ASSERT_LINE);

  168      z80_nmi = 1;

  169  }

  170  

  171  static WRITE32_HANDLER( psikyo_soundlatch_w )

  172  {

  173      if (ACCESSING_BITS_0_7)

  174          timer_call_after_resynch(NULL, data & 0xff, psikyo_soundlatch_callback);

  175  }

  176  

  177  /***************************************************************************

  178                          Strikers 1945 / Tengai

  179  ***************************************************************************/
										

  180  

  181  static WRITE32_HANDLER( s1945_soundlatch_w )

  182  {

  183      if (ACCESSING_BITS_16_23)

  184          timer_call_after_resynch(NULL, (data >> 16) & 0xff, psikyo_soundlatch_callback);

  185  }

  186  

  187  static
										const UINT8 s1945_table[256] = {

  188      0x00, 0x00, 0x64, 0xae, 0x00, 0x00, 0x26, 0x2c, 0x00, 0x00, 0x2c, 0xda, 0x00, 0x00, 0x2c, 0xbc,

  189      0x00, 0x00, 0x2c, 0x9e, 0x00, 0x00, 0x2f, 0x0e, 0x00, 0x00, 0x31, 0x10, 0x00, 0x00, 0xc5, 0x1e,

  190      0x00, 0x00, 0x32, 0x90, 0x00, 0x00, 0xac, 0x5c, 0x00, 0x00, 0x2b, 0xc0

  191  };

  192  

  193  static
										const UINT8 s1945a_table[256] = {

  194      0x00, 0x00, 0x64, 0xbe, 0x00, 0x00, 0x26, 0x2c, 0x00, 0x00, 0x2c, 0xda, 0x00, 0x00, 0x2c, 0xbc,

  195      0x00, 0x00, 0x2c, 0x9e, 0x00, 0x00, 0x2f, 0x0e, 0x00, 0x00, 0x31, 0x10, 0x00, 0x00, 0xc7, 0x2a,

  196      0x00, 0x00, 0x32, 0x90, 0x00, 0x00, 0xad, 0x4c, 0x00, 0x00, 0x2b, 0xc0

  197  };

  198  

  199  static
										const UINT8 s1945j_table[256] = {

  200      0x00, 0x00, 0x64, 0xb6, 0x00, 0x00, 0x26, 0x2c, 0x00, 0x00, 0x2c, 0xda, 0x00, 0x00, 0x2c, 0xbc,

  201      0x00, 0x00, 0x2c, 0x9e, 0x00, 0x00, 0x2f, 0x0e, 0x00, 0x00, 0x31, 0x10, 0x00, 0x00, 0xc5, 0x92,

  202      0x00, 0x00, 0x32, 0x90, 0x00, 0x00, 0xac, 0x64, 0x00, 0x00, 0x2b, 0xc0

  203  };

  204  

  205  static UINT8 s1945_mcu_direction, s1945_mcu_latch1, s1945_mcu_latch2, s1945_mcu_inlatch, s1945_mcu_index;

  206  static UINT8 s1945_mcu_latching, s1945_mcu_mode, s1945_mcu_direction, s1945_mcu_control, s1945_mcu_bctrl;

  207  static
										const UINT8 *s1945_mcu_table;

  208  

  209  static
										void s1945_mcu_init(const UINT8 *mcu_table)

  210  {

  211      s1945_mcu_direction = 0x00;

  212      s1945_mcu_inlatch = 0xff;

  213      s1945_mcu_latch1 = 0xff;

  214      s1945_mcu_latch2 = 0xff;

  215      s1945_mcu_latching = 0x5;

  216      s1945_mcu_control = 0xff;

  217      s1945_mcu_index = 0;

  218      s1945_mcu_mode = 0;

  219      s1945_mcu_table = mcu_table;

  220      s1945_mcu_bctrl = 0x00;

  221  }

  222  

  223  static WRITE32_HANDLER( s1945_mcu_w )

  224  {

  225      // Accesses are always bytes, so resolve it
										

  226      int suboff;

  227      for(suboff=0; suboff < 3; suboff++)

  228          if((0xff << (8*suboff)) & mem_mask)

  229              break;

  230      data >>= 8*suboff;

  231      offset = offset*4+4+(3-suboff);

  232  

  233      switch(offset) {

  234      case 0x06:

  235          s1945_mcu_inlatch = data;

  236          break;

  237      case 0x08:

  238          s1945_mcu_control = data;

  239          break;

  240      case 0x09:

  241          s1945_mcu_direction = data;

  242          break;

  243      case 0x07:

  244          psikyo_switch_banks(1, (data >> 6) & 3);

  245          psikyo_switch_banks(0, (data >> 4) & 3);

  246          s1945_mcu_bctrl = data;

  247          break;

  248      case 0x0b:

  249          switch(data | (s1945_mcu_direction ? 0x100 : 0)) {

  250          case 0x11c:

  251              s1945_mcu_latching = 5;

  252              s1945_mcu_index = s1945_mcu_inlatch;

  253              break;

  254          case 0x013:

  255  //          logerror("MCU: Table read index %02x\n", s1945_mcu_index);
										

  256              s1945_mcu_latching = 1;

  257              s1945_mcu_latch1 = s1945_mcu_table[s1945_mcu_index];

  258              break;

  259          case 0x113:

  260              s1945_mcu_mode = s1945_mcu_inlatch;

  261              if(s1945_mcu_mode == 1) {

  262                  s1945_mcu_latching &= ~1;

  263                  s1945_mcu_latch2 = 0x55;

  264              } else {

  265                  // Go figure.
										

  266                  s1945_mcu_latching &= ~1;

  267                  s1945_mcu_latching |= 2;

  268              }

  269              s1945_mcu_latching &= ~4;

  270              s1945_mcu_latch1 = s1945_mcu_inlatch;

  271              break;

  272          case 0x010:

  273          case 0x110:

  274              s1945_mcu_latching |= 4;

  275              break;

  276          default:

  277  //          logerror("MCU: function %02x, direction %02x, latch1 %02x, latch2 %02x (%x)\n", data, s1945_mcu_direction, s1945_mcu_latch1, s1945_mcu_latch2, activecpu_get_pc());
										

  278              break;

  279          }

  280          break;

  281      default:

  282  //      logerror("MCU.w %x, %02x (%x)\n", offset, data, activecpu_get_pc());
										

  283          ;

  284      }

  285  }

  286  

  287  static READ32_HANDLER( s1945_mcu_r )

  288  {

  289      switch(offset) {

  290      case 0: {

  291          UINT32 res;

  292          if(s1945_mcu_control & 16) {

  293              res = s1945_mcu_latching & 4 ? 0x0000ff00 : s1945_mcu_latch1 << 8;

  294              s1945_mcu_latching |= 4;

  295          } else {

  296              res = s1945_mcu_latching & 1 ? 0x0000ff00 : s1945_mcu_latch2 << 8;

  297              s1945_mcu_latching |= 1;

  298          }

  299          res |= s1945_mcu_bctrl & 0xf0;

  300          return res;

  301      }

  302      case 1:

  303          return (s1945_mcu_latching << 24) | 0x08000000;

  304      }

  305      return 0;

  306  }

  307  

  308  static READ32_HANDLER( s1945_input_r )

  309  {

  310      switch(offset)

  311      {

  312          case 0x0:   return (input_port_read(machine, "IN0") << 16) | psikyo_readcoinport(machine, 1);

  313          case 0x1:   return (((input_port_read(machine, "DSW1") << 16) | input_port_read(machine, "DSW2")) & 0xffff000f) | s1945_mcu_r(machine, offset-1, mem_mask);

  314          case 0x2:   return s1945_mcu_r(machine, offset-1, mem_mask);

  315          default:    logerror("PC %06X - Read input %02X !\n", activecpu_get_pc(), offset*2);

  316                      return 0;

  317      }

  318  }

  319  
								


: 댓글 1             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

가끔 Visual Studio 가 실행되거나, 종료되지 않을 경우(켜지지도 않고 꺼지지도 않을 경우) 가 발생합니다.

 

그럴 경우에는 어쩔 수 없이 강제종료를 해야겠지만 그래도 안전하게 몇가지 시도를 해보도록 합시다.

 

제가 사용하는 해결 순서를 알려드립니다.

 

 

해결 순서

 

1. 모든 정보를 저장한다.

(혹시 저장이 되지 않는다면 내용을 별도의 파일에 복사해둔다.)

 

2. Visual Studio 를 정상 종료를 시도해본다.

 

3. Explorer나 인터넷, 각종 실행중인 프로그램을 종료 후 Visual Studio 를 종료, 시작을 시도해본다.

 

4. 작업 관리자에서 devenv.exe 파일을 찾아서 강제종료 후 Visual Studio 를 종료, 시작을 시도해본다.

 

5. 컴퓨터를 재 부팅한다. -_-+

 

 

대부분 아래 부분의 메모리가 비정상적으로 올라갈 경우가 많더군요.

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

프로젝트를 개발을 하면 프로젝트 또는 파일의 디렉터리를 탐색하는 경우가 매우 빈번합니다.

 

외부도구를 사용하여 Visual Studio파일 익스플러러, 프로젝트 Explorer 탐색기를 등록하여 사용을 하면 편리하게 해당 디렉터리에서 탐색기를 실행할 수 있습니다.

 

 

등록방법

 

도구 -> 외부 도구를 실행한다.

 

 

 

아래와 같이 프로젝트 익스플러러 와 파일 익스플러러를 등록한다.

 

 

 

등록이 정상적으로 완료되었다면 아래와 같은 메뉴가 생깁니다.

(추가로 단축키를 등록하여 사용하면 더욱 편리합니다.)

 

 

 

실행을 하면 다음과 같이 프로젝트 또는 파일의 디렉터리 탐색기가 실행됩니다.

 


: 댓글 1             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

Visual Studio 2005 에 눈에 잘 띄지는 않지만 소스 코드의 에디터 변경, 저장 여부 저장을 확인할 수 있는 기능이 있습니다.

 

아래와 같이

 

- 녹색으로 표시된 부분은 수정하여 저장된 라인을 뜻하고

 

- 노란색으로 표시된 부분은 저장하지 않은 수정된 라인을 뜻합니다.

 

 

비록 눈에 안 띄는 세세한 기능이기는 하지만 개발자의 노고가 느껴지네요. ^^*

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

프로그램 개발에서 소스 관리는 매일 강조해도 지나치지 않습니다.

 

때문에 대부분의 개발자들은 SVC, Tortoise SVN, 소스세이프(Source Safe)등을 활용하여 소스를 관리하는데, 팀 단위 개발은 물론이고 나 홀로 개발일지라도 소스관리 프로그램을 사용하는 것이 안전을 위해서나, 복구, 수정, 확인을 위해서 매우 편리하고 중요한 역할을 합니다.

 

이번에는 Tortoise SVN 을 활용하여 로그보기, 업데이트된 곳 찾기, Diff등을 활용해봅니다.

 

 

로그 보기

 

다음과 같은 방법으로 SVN 로그 보기를 하면 업데이트된 날짜와 사람, 수정되거나 추가, 삭제된 항목이 화면이 나타납니다.

 

 

 

바뀐점 보기

 

바뀐점 보기를 사용하면 프로그램 소스코드에서 수정, 삭제, 추가된 부분을 검사할 수 있습니다.

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

상용 서버 프로그램은 별다른 UI 도 필요 없는 것이 대부분입니다.

 

그러하기 때문에 많은 서버 개발자 분들은 서비스 기반으로 개발하시는 분들도 많은데 ,간혹 조작을 하거나 몇 가지 점검을 하기 위해서는 메시지나 로그보다는 간단하게나마 UI가 있으면 더욱 관리하기가 편하더군요.

 

저는 개인적으로 서비스를 개발이 불편하고 어려워서 가급적 다이얼로그 기반으로 서버 프로그램(데몬, Demon)을 구성하고, 서비스 기반이 아니기 프로그램 자동 시작, 재 시작 등을 위하여 때문에 제가 개발한 자동 재실행 프로그램(Auto Alive, Auto Restarter)을 유틸리티로 활용합니다.

 

다른 개발자 분들은 어떻게 서버 UI을 구성하시나요?

 

아래는 제가 개발한 서버프로그램의 UI 입니다.

 

 

서치아이 서버 프로그램

 

 

 

배드볼 서버 프로그램

 

 

 

최근에 개발한 맞고, 포커, 보드게임, 각종 서버프로그램

 

맨날 보는 서버 프로그램도 이쁘게~ ^-^

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

저희 회사 ㈜펀그랩에서 서버 프로그램 개발 인력, 라이블러리, 게임 네트워크 엔진 지원 문의 및 답변 문서입니다.

 

 

프로그램 개발, 프로그래머 외주를 요청하는 업체에게 당부의 말씀

 

서버와 클라이언트가 유기적으로 맞물려 돌아가야 하기 때문에 서버 개발만으로는 프로젝트가 완수되지 않고 신작 게임의 특성상 개발도중 변화되는 부분이 변화 무쌍합니다.

 

요구하신 부분은 견적을 받아서 개발하기는 시간으로나, 비용으로나 애로사항이 많고, 개발 완료된 이후 서버의 수정 및 업데이트가 문제가 많습니다.

 

저 역시 개발업체를 많이 봐왔지만 일반적으로는 어느 업체, 개인이 의뢰를 받아 개발을 하더라도 직원이 아닌 외주 개발로는 서버 프로그램이 요구사항에 부합될 수 없고 개발이 완료되더라도 이후 업데이트가 어렵고 결국은 서로 실패할 가능성이 매우 높습니다.

 

 

제가 제안하는 방법은 다음과 같습니다.

 

- 회사가 신생회사라면, 외주보다는 함께 오래 근무 할 정말 믿을 수 있는 초~중급의 서버 프로그래머를 구인 또는 모집합니다. 실력과 센스가 있다면 기존의 1년 차 분도 좋습니다.

 

- 고급의 서버 개발자를 구인하신다면 더욱 좋겠습니다.

 

- 저희가 그분을 도와서 서버 프로그램을 개발 할 수 있도록 능력을 키워 드리고 노하우, 구조, 네트워크 라이브러리를 제공해 드립니다. 즉 서버 개발 팀장의 역할을 해드립니다.

 

- 비용은 최초 네트워크 엔진, DB 엔진 전체 소스 제공 비용과 방문 횟수에 따른 비용을 책정하시면 됩니다.

 

- 총 개발 기간은 저희 제공 부분과 직원 분의 능력에 달렸다고 보시면 됩니다.

 

 

자세한 내용은 방문하셔서 상담을 하시면 좋겠습니다.

 

 

서버 프로그램 외주 개발에서 필요한 분야 ..

 

- 서버 전체:

 

서버 네트워크 엔진

데이터 베이스 엔진

데이터 베이스 설계

로그인, 서버, 채널, 게임 방 관련 프로그래밍

유저 분산 서버,

 

 

- 클라이언트와 서버의 연동 부분

 

클라이언트 네트워크 엔진,

로그인, 서버, 채널, 게임 방 관련 네트워크 프로그래밍

 

 

- 상점

 

구매하기, 선물하기, 버리기, 인벤토리, 착용하기, 사용하기, 상점목록,

상점 관리자 프로그램, 복잡한 구매관련DB 등 서버와 DB에 수많은 기능이 생겨납니다.

 

 

- 추가기능: (선택사양)

 

쪽지, 1:1대화, 초대하기, 친구 메신저 등

 

 

비용 및 기본 구조

 

1. 최초 네트워크 엔진, DB 엔진 전체 소스 제공 비용

 

: 2003년부터 개발 & 업데이트되었고 상용 프로그램도 많이 개발되어 안정적입니다.

전체 소스코드 제공, 기본사용법 지원, 개발지원

 

비용: X천만 원

저작권: 펀그랩, 회사 내 모든 프로젝트 무기한 사용권 제공

개발지원: 소스코드의 버그 수정 6개월, 5회 방문하여 개발지원

 

 

2. 해당 엔진을 이용하여 개발된 실제 안정적으로 서비스되는 클럽 맞고를 기반으로 한 서버 & 클라이언트 프레임워크 및 DB 구조를 이용하여 기본 프로그램을 개발해드립니다.

 

: 제공 프로그램 및 소스: 채널서버, 로그인 서버, 게임서버, 연동되는 클라이언트

(참고 게임 클럽 맞고: URL: http://www.tk.co.kr/matgo/)

 

비용: X천만원

저작권: 펀그랩, 회사 내 모든 프로젝트 무기한 사용권 제공,

개발지원: 소스코드의 버그 수정 6개월, 5회 방문하여 개발지원

 

 

추가옵션:

 

버그(오류) 콜스택 자동 리포팅 시스템, 자동업데이트 툴, ActiveX 홈페이지 게임실행,

서버다운 감지 SMS 발송 프로그램, 서버 자동실행, 생존 프로그램

 

 

3. 방문 횟수에 따른 서버&클라이언트 개발 지원 비용:

 

: 1회 4시간 기준 XX만원,

 

 

질문 / 답변..

 

1. 조인서버에 채널 서버 n대가 물리고, 채널서버 1대에 게임서버 n대가 물리는 구조 같은데요.

일반적으로 서버에 쓰이는 4CPU 머신을 기준으로 했을 때 보통 1머신에 게임, 채널 서버를 어떻게 띄우나요?

그리고, 1머신 당 최대 동접을 어느 정도로 생각하면 될까요?

 

- 기본구조는 채널서버1, 조인서버1, 게임서버 N 입니다.

 

- 1서버당 1000 ~ 5천명은 커버가 될듯합니다.

하지만 다양한 조건과 상황이 있기 때문에 실제 서비스를 하면서 결정해야 합니다.

 

- 여러 개의 서버 구동은 아래 이미지와 같이 그냥 실행하면 여러 개를 구동할 수 있습니다.

서비스로 개발하는 방법도 있지만 개발, 관리가 어려워서 프로그램 방식으로 개발하였습니다.

 

 

2. 클라이언트가 조인서버, 채널서버, 게임서버에 직접 연결하는 방식인가요? 아니면 frond-end 서버를 따로 두는 방식인가요?

만약 직접 각 서버에 연결하는 방식이라면 채널이동 시/게임시작 종료 시에 커넥션 연결/해제가 발생하나요?

 

- 클라이언트는 게임서버와 채널서버 만 접근이 가능합니다.

채널서버의 용도는 게임서버의 아이피와, 유저 수, 접속정보 등을 유저에게 전달하는 단순한 역할만 합니다.

 

 

3. DB 서버가 메모리 DB나 pooler의 역할을 수행하나요? 아니면 요청 시 즉각 즉각 쿼리를 날리는 형식인가요?

 

- DB서버는 별도로 구동되지 않고 서버 프로그램 내부에서 처리됩니다.

메모리 DB는 사용하지 않고, 즉각 쿼리를 처리할 수 도 있지만

랙을 고려해야 하므로 별도의 쓰레드를 이용하여 비동기적으로 DB를 처리합니다.

 

 

4. 메신저등을 지원하는데 다른 채널 유저들끼리도 채팅이 가능한가요?

 

- 예 가능합니다. (조인서버가 1:1채팅 서버의 역할을 합니다.)

 

- 친구 찾기, 1:1대화를 제외한 커뮤니티 기능들은 (메신저 및 쪽지, 방명록, 클럽)

Web 와 PHP, 게임서버를 이용하고 복잡한 방법으로 개발되어있기 때문에 자체적으로 추가개발을 해야 합니다.

 

 

- 서버가 여러 개 구동된 모습: 동접 200 명일 경우 CPU는 1%도 차지하지 않습니다.

 

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

게임서버가 다운이 안되게 하는 것이 좋지만 다운이 되면 사후조치를 잘 하는 것이 더욱 중요합니다.

 

게임 서버 다운 현상 발생시 대처방법을 소개해드립니다.

 

 

게임서버의 모습

 

티케이게임에서 서비스되는 게임서버의 모습

 

 

 

방법

 

1. 게임서버의 다운을 감지한다. ( 체크서버를 이용하여 감시)

 

2. 서버에 접속하여 간단히 원인을 조사한다.

 

3. 서버를 재빨리 재시작 한다.

 

4. 닥터왓슨 (Dr. Watson, Drwtsn32.exe)을 이용하여 프로그램 콜스텍과 크래시 덤프를 조사하여 오류 원인을 자세히 검사한다.

 

5. 프로그램 오류에 해당하는 의심 나는 소스코드를 조사하여 수정하거나 로그를 남긴다.

 

6. 일정을 결정하여 서버를 패치, 업데이트한다.

 

 

 


: 댓글 1             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

오늘이 주말인지 무슨 요일인지 검사하는 코드입니다.

 

 

 

요일과 숫자의 연관도 :

 

월요일 = 1

화요일 = 2

수요일 = 3

목요일 = 4

금요일 = 5

토요일 = 6

일요일 = 0

 

 

소스코드

 

    // 주말여부를확인한다. 작성자 : kyuseo

    time_t ttCurrent = time( NULL );

    tm TM;

    localtime_s( &TM, &ttCurrent );

 

    if( TM.tm_wday == 0 || TM.tm_wday == 6 )

    {

 

        return 1;

    }

 

    return 0;

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.

한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)       작성자: 게임 프로그래머 Kyuseo의 게임 프로그래밍 이야기 :: http://soonsin.com | 트위터 @kyuseo

Share   

개요..

 

게임, 프로그램을 개발하다 보면 특정 상황에서 다운이 되는 현상이 발생합니다.

 

해당 콜스텍(Call Stack)을 알 수 있다면 오류를 쉽게 수정할 수 있지만 개발자의 PC가 아니므로 오류재현도 쉽지가 않습니다.

 

이를 자동화하고 해결하고자 오류 신고 시스템과 PDB 파일을 이용한 오류 덤프 시스템을 혼합하여 사용합니다.

 

 

오류 신고 시스템이 작동되는 과정

 

1. 프로그램 오류가 발생되면 PDB 파일을 암호화하여 배포된 파일에서 오류 함수를 콜스택(Call Stack)검색하여 오류 정보를 작성합니다. (SeTranslator를 이용함)

 

2. 간단한 사용자의 시스템과 실행되고 있는 함수 목록을 작성합니다.

 

3. 아래와 같은 오류 신고 시스템이 프로그램을 작동합니다.

 

 

 

4. 게시판에 오류내용을 등록합니다.

 

 

실제 신고된 모습

 

 

 

*----> 사용자 정보 <----*
프로그램 : 클럽고스톱 (ClubGostop.dll)
Build : 246
Time : 2007/10/24, 10:05:45

아이디: kyuseo
실행시간: 377

Exception : ACCESS_VIOLATION (0xc0000005), Address : 0x0185842f
Module : C:\Program Files\TK\ClubGostop\ClubGostop.dll (Base Address : 0x01850000, Exception Address : 0x0185842f)

FramePtr ReturnAd Param#1 Param#2 Param#3 Param#4 Function Name

00 0185842F 0194A12D 01A39398 0000015E 00000022 FFFFFFFFFFFFFFFF CPImage::Draw (d:\pmangoengine\include\pimage.h:133)
01 0194A12D 01947F77 0012F570 0639AA58 021DCAD8 021DCA14 CPWnd::OnPaintUpdate (d:\pmangoengine\pmangogui\pwnd.cpp:824)
02 01947F77 01947EAC 021DCAD8 021CEBA8 00000000 01947ECA CPWnd::OnPaintMain (d:\pmangoengine\pmangogui\pwnd.cpp:1008)
03 01947EAC 00000000 000003E8 08C00000 00000000 00000000 CPWnd::UpdateWindow (d:\pmangoengine\pmangogui\pwnd.cpp:802)



*---->
시스템 정보 <----*
현재 날짜/시간 : 2007-10-25 16:24:35
현재 디렉토리 : C:\Program Files\TK\ClubGostop
시스템 디렉토리 : C:\WINDOWS\system32
운영 체제 : Microsoft Windows XP version 5.1 (Build 2600 ) Service Pack 2
프로세서 : Intel Level=6, Revision=0xf06, Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz, GenuineIntel, ~3200 MHz
프로세서 : 2
실제 메모리 : 980MB 사용됨, 1065MB 사용가능
가상 메모리 : 47MB 사용됨, 2000MB 사용가능
페이지 파일 : 793MB 사용됨, 1102MB 사용가능

*---->
모듈 정보 <----*
파일명 기본 주소 파일 버전 제품 버전 전체 경로
*ClientLauncher.exe 1.0.0.1 1.0.0.1 ClientLauncher.exe
ClientLauncher.exe 0x400000 1.0.0.1 1.0.0.1 C:\Program Files\TK\ClubGostop\ClientLauncher.exe
ntdll.dll 0x7c930000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\ntdll.dll
kernel32.dll 0x7c800000 5.1.2600.3119 5.1.2600.3119 C:\WINDOWS\system32\kernel32.dll
USER32.dll 0x77cf0000 5.1.2600.3099 5.1.2600.3099 C:\WINDOWS\system32\USER32.dll
GDI32.dll 0x77e20000 5.1.2600.3159 5.1.2600.3159 C:\WINDOWS\system32\GDI32.dll
comdlg32.dll 0x76300000 6.0.2900.2180 6.0.2900.2180 C:\WINDOWS\system32\comdlg32.dll
SHLWAPI.dll 0x77e70000 6.0.2900.3199 6.0.2900.3199 C:\WINDOWS\system32\SHLWAPI.dll
ADVAPI32.dll 0x77f50000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\ADVAPI32.dll
RPCRT4.dll 0x77d80000 5.1.2600.3173 5.1.2600.3173 C:\WINDOWS\system32\RPCRT4.dll
Secur32.dll 0x77ef0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\Secur32.dll
msvcrt.dll 0x77bc0000 7.0.2600.2180 6.1.8638.2180 C:\WINDOWS\system32\msvcrt.dll
COMCTL32.dll 0x5c820000 5.82.2900.2982 6.0.2900.2982 C:\WINDOWS\system32\COMCTL32.dll
SHELL32.dll 0x7d5a0000 6.0.2900.3051 6.0.2900.3051 C:\WINDOWS\system32\SHELL32.dll
WINSPOOL.DRV 0x72f50000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\WINSPOOL.DRV
oledlg.dll 0x7df80000 5.1.2600.3016 5.1.2600.3016 C:\WINDOWS\system32\oledlg.dll
ole32.dll 0x76970000 5.1.2600.2726 5.1.2600.2726 C:\WINDOWS\system32\ole32.dll
OLEAUT32.dll 0x770d0000 5.1.2600.3139 5.1.2600.3139 C:\WINDOWS\system32\OLEAUT32.dll
WININET.dll 0x76660000 6.0.2900.3199 6.0.2900.3199 C:\WINDOWS\system32\WININET.dll
CRYPT32.dll 0x765c0000 5.131.2600.2180 5.131.2600.2180 C:\WINDOWS\system32\CRYPT32.dll
MSASN1.dll 0x77c40000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\MSASN1.dll
IMM32.DLL 0x762e0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\IMM32.DLL
LPK.DLL 0x62340000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\LPK.DLL
USP10.dll 0x73f80000 1.420.2600.2180 1.420.2600.2180 C:\WINDOWS\system32\USP10.dll
comctl32.dll 0x77160000 6.0.2900.2982 6.0.2900.2982 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2982_x-ww_ac3f9c03\comctl32.dll
dxsnap.dll
정보 없음 정보 없음 정보 없음 C:\Program Files\HyperSnap 6\dxsnap.dll
WINMM.dll 0x76af0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\WINMM.dll
HSTxtCap.dll 0x1740000 1.0.3.0 1.0.3.0 C:\Program Files\HyperSnap 6\HSTxtCap.dll
RTSUltraMonHook.dll 0x18800000 2.7.0.0 2.7.0.0 C:\Program Files\UltraMon\RTSUltraMonHook.dll
UxTheme.dll 0x5a480000 6.0.2900.2180 6.0.2900.2180 C:\WINDOWS\system32\UxTheme.dll
ClubGostop.dll 0x1850000 1.0.0.1 1.0.0.1 C:\Program Files\TK\ClubGostop\ClubGostop.dll
dbghelp.dll 0x2800000 6.3.17.0 6.3.17.0 C:\Program Files\TK\ClubGostop\dbghelp.dll
DSOUND.dll 0x73e50000 5.3.2600.2180 5.3.2600.2180 C:\WINDOWS\system32\DSOUND.dll
VERSION.dll 0x77bb0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\VERSION.dll
WS2_32.dll 0x719e0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\WS2_32.dll
WS2HELP.dll 0x719d0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\WS2HELP.dll
DDRAW.dll 0x736b0000 5.3.2600.2180 5.3.2600.2180 C:\WINDOWS\system32\DDRAW.dll
DCIMAN32.dll 0x73b10000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\DCIMAN32.dll
msctfime.ime 0x75110000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\msctfime.ime
IMKR12.IME 0x3a700000 12.0.4518.0 12.0.4518.0 C:\WINDOWS\system32\IMKR12.IME
MSVCR80.dll 0x78130000 8.0.50727.762 8.0.50727.762 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\MSVCR80.dll
MSVCP80.dll 0x7c420000 8.0.50727.762 8.0.50727.762 C:\WINDOWS\WinSxS\x86_Microsoft.VC80.CRT_1fc8b3b9a1e18e3b_8.0.50727.762_x-ww_6b128700\MSVCP80.dll
wsock32.dll 0x71a00000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\wsock32.dll
WINTRUST.dll 0x76be0000 5.131.2600.2180 5.131.2600.2180 C:\WINDOWS\system32\WINTRUST.dll
IMAGEHLP.dll 0x76c40000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\IMAGEHLP.dll
wdmaud.drv 0x72c70000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\wdmaud.drv
msacm32.drv 0x72c60000 5.1.2600.0 5.1.2600.0 C:\WINDOWS\system32\msacm32.drv
MSACM32.dll 0x77b90000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\MSACM32.dll
midimap.dll 0x77b80000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\midimap.dll
KsUser.dll 0x73e20000 5.3.2600.2180 5.3.2600.2180 C:\WINDOWS\system32\KsUser.dll
RASAPI32.DLL 0x76e90000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\RASAPI32.DLL
rasman.dll 0x76e40000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\rasman.dll
NETAPI32.dll 0x605f0000 5.1.2600.2976 5.1.2600.2976 C:\WINDOWS\system32\NETAPI32.dll
TAPI32.dll 0x76e60000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\TAPI32.dll
rtutils.dll 0x76e30000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\rtutils.dll
msv1_0.dll 0x77f10000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\msv1_0.dll
iphlpapi.dll 0x76d10000 5.1.2600.2912 5.1.2600.2912 C:\WINDOWS\system32\iphlpapi.dll
sensapi.dll 0x72220000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\sensapi.dll
USERENV.dll 0x759b0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\USERENV.dll
urlmon.dll 0x7e690000 6.0.2900.3199 6.0.2900.3199 C:\WINDOWS\system32\urlmon.dll
mswsock.dll 0x71980000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\System32\mswsock.dll
DNSAPI.dll 0x76ed0000 5.1.2600.2938 5.1.2600.2938 C:\WINDOWS\system32\DNSAPI.dll
rasadhlp.dll 0x76f70000 5.1.2600.2938 5.1.2600.2938 C:\WINDOWS\system32\rasadhlp.dll
hnetcfg.dll 0x65cb0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\hnetcfg.dll
wshtcpip.dll 0x719c0000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\System32\wshtcpip.dll
CLBCATQ.DLL 0x76f80000 2001.12.4414.308 3.0.0.4414 C:\WINDOWS\system32\CLBCATQ.DLL
COMRes.dll 0x77000000 2001.12.4414.258 3.0.0.4414 C:\WINDOWS\system32\COMRes.dll
shdocvw.dll 0x7e740000 6.0.2900.3199 6.0.2900.3199 C:\WINDOWS\system32\shdocvw.dll
CRYPTUI.dll 0x75410000 5.131.2600.2180 5.131.2600.2180 C:\WINDOWS\system32\CRYPTUI.dll
WLDAP32.dll 0x76f10000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\WLDAP32.dll
SXS.DLL 0x75de0000 5.1.2600.3019 5.1.2600.3019 C:\WINDOWS\system32\SXS.DLL
msctf.dll 0x74660000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\msctf.dll
winrnr.dll 0x76f60000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\System32\winrnr.dll
Apphelp.dll 0x76d90000 5.1.2600.2180 5.1.2600.2180 C:\WINDOWS\system32\Apphelp.dll

*---->
추가 모듈 정보 <----*
파일명 기본 주소 파일 버전 제품 버전 전체 경로
dsound.dll 5.3.2600.2180 5.3.2600.2180 dsound.dll
msxml.dll 8.0.7002.0 8.0.7002.0 msxml.dll
msxml3.dll 8.90.1101.0 8.90.1101.0 msxml3.dll
msxml4.dll 4.20.9841.0 4.20.9841.0 msxml4.dll

*---->
작업 목록 <----*
PID
이미지 이름
0 [System Process]
4 System
556 smss.exe
620 csrss.exe
648 winlogon.exe
692 services.exe
704 lsass.exe
868 svchost.exe
928 svchost.exe
1440 svchost.exe
1588 svchost.exe
1752 svchost.exe
1884 aawservice.exe
232 spoolsv.exe
1368 Crypserv.exe
1508 ircomm2k.exe
1572 vmware-authd.exe
292 vmount2.exe
400 vmnat.exe
1068 vrmonsvc.exe
1168 vssvc.exe
1668 explorer.exe
1596 vmnetdhcp.exe
1288 alg.exe
2136 TSVNCache.exe
2456 ipoint.exe
2552 itype.exe
2584 UltraMon.exe
3364 wcescomm.exe
3388 UltraMonTaskbar.exe
3400 ArsClip.exe
3476 HprSnap6.exe
3484 svchost.exe
3496 taskmgr.exe
3712 rapimgr.exe
3740 DalTongMan.exe
3884 DalTong.exe
3904 DalTong.exe
3920 DalTong.exe
3960 DalTong.exe
3968 DalTong.exe
592 DalTong.exe
2396 Vrmonnt.exe
1412 HrRes.exe
2300 GmoconApp.exe
2872 ClientLauncher.exe
960 devenv.exe
2304 conime.exe
2240 svchost.exe
1224 ClientLauncher.exe
2972 ClientLauncher.exe
440 ClientLauncher.exe
3876 WINWORD.EXE
3376 Reporter.exe
3432 Reporter.exe
3256 Reporter.exe

 

PDB 파일을 변환한 모습 (실제로는 암호화 하여 배포합니다.)

 

*----> Header <----*

현재 날짜/시간 : 2008-03-21 10:41:53

버전 = 1, 심볼 개수 = 18420, 라인 파일명 개수 = 768, 라인 개수 = 72377

 

모듈명 기본 주소 심볼 라인

Release\ClubPoker.dll 0x10000000 O O

 

 

*----> Symbol <----*

0x00001000 6 CClubPokerApp::GetThisMessageMap

0x00001006 5 CClubPokerApp::~CClubPokerApp

0x0000100B 25 ATL::AtlThrowImpl

0x00001024 4 ATL::CStringData::data

0x00001028 11 ATL::CStringData::AddRef

0x00001033 9 ATL::CStringData::IsLocked

0x0000103C 10 ATL::CStringData::IsShared

0x00001046 26 ATL::CStringData::Release

0x00001060 19 strcpy_s<32>

0x00001073 9 AfxOleGetMessageFilter

0x0000107C 10 COleMessageFilter::SetMessagePendingDelay

0x00001086 10 COleMessageFilter::EnableBusyDialog

0x00001090 10 COleMessageFilter::EnableNotRespondingDialog

0x0000109A 6 GetGameInfo

0x000010A0 3 ATL::CSimpleStringT<char,0>::operator char const *

0x000010A3 12 ATL::CSimpleStringT<char,0>::Attach

0x000010AF 6 ATL::CSimpleStringT<char,0>::GetData

0x000010B5 38 ATL::CSimpleStringT<char,0>::SetLength

0x000010DB 5 StrTraitMFC<char,ATL::ChTraitsCRT<char> >::GetDefaultManager

0x000010E0 5 ATL::ChTraitsCRT<char>::GetFormattedLength

0x000010E5 5 ATL::ChTraitsCRT<char>::Format

0x000010EA 5 ATL::CSimpleStringT<char,0>::CopyChars

0x000010EF 11 ATL::CSimpleStringT<char,0>::ThrowMemoryException

0x000010FA 104 ATL::CSimpleStringT<char,0>::Fork

0x00001162 91 ATL::CSimpleStringT<char,0>::CloneData

0x000011BD 52 ATL::CSimpleStringT<char,0>::Reallocate

0x000011F1 6 CClubPokerApp::GetMessageMap

0x000011F7 64 GetSeTranslator

0x00001237 37 ATL::CSimpleStringT<char,0>::CSimpleStringT<char,0>

0x0000125C 30 ATL::CSimpleStringT<char,0>::CSimpleStringT<char,0>

0x0000127A 10 ATL::CSimpleStringT<char,0>::~CSimpleStringT<char,0>

0x00001284 5 ATL::CSimpleStringT<char,0>::ReleaseBufferSetLength

0x00001289 71 ATL::CSimpleStringT<char,0>::PrepareWrite2

0x000012D0 54 CClubPokerApp::CClubPokerApp

0x00001306 3 CObject::Serialize

0x00001309 13 CObject::operator delete

0x00001316 28 CClubPokerApp::`scalar deleting destructor'

0x00001332 20 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >

0x00001346 18 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >

0x00001358 10 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::~CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >

0x00001362 42 ATL::CSimpleStringT<char,0>::PrepareWrite

0x0000138C 5 ATL::CSimpleStringT<char,0>::GetBuffer

0x00001391 79 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::FormatV

0x000013E0 59 Stringf

0x0000141B 116 GetIni

0x0000148F 162 CClubPokerApp::InitInstance

0x00001531 59 DestroyGame

0x0000156C 1 GetGameParam

0x0000156D 28 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::ElementAt

0x00001589 3 CObject::CObject

0x0000158C 1 CObject::~CObject

0x0000158D 9 AfxGetApp

0x00001596 31 RelayCommonClientEvent

0x000015B5 4 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::GetSize

0x000015B9 5 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::operator[]

0x000015BE 38 RelayGameEvent

0x000015E4 19 GetGameInfo

0x000015F7 23 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>

0x0000160E 5 operator new

0x00001613 39 AfxCrtErrorCheck

0x0000163A 31 ATL::Checked::memcpy_s

0x00001659 9 CArchive::IsStoring

0x00001662 84 GetVars

0x000016B6 79 GetReg

0x00001705 64 GetCPWebOnline

0x00001745 235 CreateGame

0x00001830 33 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::`scalar deleting destructor'

0x00001851 508 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::SetSize

0x00001A4D 54 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::~CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>

0x00001A83 61 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::Serialize

0x00001AC0 28 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::`scalar deleting destructor'

0x00001ADC 18 CPArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CPArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>

0x00001AEE 5 CPArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::~CPArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>

0x00001AF3 28 CPArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::`scalar deleting destructor'

0x00001B0F 115 SetGameParam

0x00001B82 1 operator delete

0x00001B83 9 Define_the_symbol__ATL_MIXED::Thank_you::Thank_you

0x00001B8C 1 Define_the_symbol__ATL_MIXED::Thank_you::one

0x00001B8D 45 ATL::AtlMultiply<int>

0x00001BBA 32 ATL::AtlMultiply<unsigned int>

0x00001BDA 5 ATL::CCRTAllocator::Allocate

0x00001BDF 5 ATL::CCRTAllocator::Free

0x00001BE4 6 InterlockedExchangePointer

0x00001BEA 93 CMap<int,int,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::InitHashTable

0x00001C47 6 ATL::_AtlGetConversionACP

0x00001C4D 55 AtlA2WHelper

0x00001C84 56 AtlW2AHelper

0x00001CBC 27 ATL::AtlThrowLastWin32

0x00001CD7 31 ATL::Checked::memmove_s

0x00001CF6 27 ATL::Checked::wcscpy_s

0x00001D11 92 ATL::_AtlGetStringResourceImage

0x00001D6D 47 ATL::AtlGetStringResourceImage

0x00001D9C 33 CompareElements<int,int>

0x00001DBD 63 ATL::_AtlInstallStringThunk

0x00001DFC 18 CPoint::CPoint

0x00001E0E 10 HashKey<int>

0x00001E18 3 _AfxInitManaged

0x00001E1B 4 CPlex::data

0x00001E1F 24 Rand

0x00001E37 21 RandRange

0x00001E4C 31 strreplace

0x00001E6B 50 IsPrimeNumber

0x00001E9D 33 GetVPrimeNumber

0x00001EBE 17 GetVPrimeNumber

0x00001ECF 23 GetVPrimeNumber120

0x00001EE6 22 Byte2KByte

0x00001EFC 22 Byte2MByte

0x00001F12 88 HitTest

0x00001F6A 90 HitTest

0x00001FC4 84 HitTest

0x00002018 40 CPFlySoundController::Play

0x00002040 9 CxFile::CxFile

0x00002049 7 CxFile::~CxFile

0x00002050 24 CxFile::PutC

0x00002068 11 CxFile::CxFile

0x00002073 5 CxFile::operator=

0x00002078 29 CxFile::`scalar deleting destructor'

0x00002095 74 CxFile::`vector deleting destructor'

0x000020DF 26 CxIOFile::CxIOFile

0x000020F9 49 CxIOFile::Open

0x0000212A 35 CxIOFile::Close

0x0000214D 31 CxIOFile::Read

0x0000216C 31 CxIOFile::Write

0x0000218B 37 CxIOFile::Seek

0x000021B0 16 CxIOFile::Tell

0x000021C0 67 CxIOFile::Size

0x00002203 24 CxIOFile::Flush

0x0000221B 23 CxIOFile::Eof

0x00002232 19 CxIOFile::Error

0x00002245 35 CxIOFile::PutC

0x00002268 19 CxIOFile::GetC

0x0000227B 27 CxIOFile::CxIOFile

0x00002296 21 CxIOFile::operator=

0x000022AB 15 CxIOFile::`default constructor closure'

0x000022BA 45 CxMemFile::CxMemFile

0x000022E7 39 CxMemFile::operator=

0x0000230E 10 CxMemFile::`default constructor closure'

0x00002318 28 CxMemFile::`scalar deleting destructor'

0x00002334 73 CxMemFile::`vector deleting destructor'

0x0000237D 11 CxImage::~CxImage

0x00002388 8 CxImage::`default constructor closure'

0x00002390 18 CxImage::`copy constructor closure'

0x000023A2 34 CxImage::`scalar deleting destructor'

0x000023C4 82 CxImage::`vector deleting destructor'

0x00002416 40 CxImageGIF::CxImageGIF

0x0000243E 11 CxImageGIF::~CxImageGIF

0x00002449 661 CxImageGIF::CxImageGIF

0x000026DE 646 CxImageGIF::operator=

0x00002964 34 CxImageGIF::`scalar deleting destructor'

0x00002986 82 CxImageGIF::`vector deleting destructor'

0x000029D8 36 GetGameCost

0x000029FC 6 GetInstance

0x00002A02 6 GetMainHwnd

0x00002A08 6 GetMainWnd

0x00002A0E 6 GetWebOnline

0x00002A14 5 _S

0x00002A19 6 GetMaxRoomSeat

0x00002A1F 6 GetMGameInfo

0x00002A25 75 IsGuestId

0x00002A70 6 ATL::_ATL_SAFE_ALLOCA_IMPL::CAtlSafeAllocBufferManager<ATL::CCRTAllocator>::CAtlSafeAllocBufferManager<ATL::CCRTAllocator>

0x00002A76 25 ATL::_ATL_SAFE_ALLOCA_IMPL::CAtlSafeAllocBufferManager<ATL::CCRTAllocator>::~CAtlSafeAllocBufferManager<ATL::CCRTAllocator>

0x00002A8F 6 ATL::CTempBuffer<char,128,ATL::CCRTAllocator>::CTempBuffer<char,128,ATL::CCRTAllocator>

0x00002A95 3 ATL::CTempBuffer<char,128,ATL::CCRTAllocator>::operator char *

0x00002A98 3 ATL::CW2AEX<128>::operator char *

0x00002A9B 3 ATL::CSimpleStringT<char,0>::GetString

0x00002A9E 9 ATL::CTempBuffer<char,128,ATL::CCRTAllocator>::FreeHeap

0x00002AA7 22 ATL::CSimpleStringT<char,0>::StringLength

0x00002ABD 10 StrTraitMFC<char,ATL::ChTraitsCRT<char> >::FindStringResourceInstance

0x00002AC7 5 ATL::ChTraitsCRT<char>::StringFindString

0x00002ACC 4 ATL::_ATL_SAFE_ALLOCA_IMPL::CAtlSafeAllocBufferManager<ATL::CCRTAllocator>::CAtlSafeAllocBufferNode::GetData

0x00002AD0 33 ATL::CTempBuffer<char,128,ATL::CCRTAllocator>::AllocateHeap

0x00002AF1 29 ATL::ChTraitsCRT<char>::GetBaseTypeLength

0x00002B0E 35 ATL::ChTraitsCRT<char>::ConvertToBaseType

0x00002B31 5 ATL::CSimpleStringT<char,0>::CopyCharsOverlapped

0x00002B36 34 ATL::AtlAdd<unsigned long>

0x00002B58 37 ATL::AtlAddThrow<unsigned long>

0x00002B7D 37 ATL::AtlMultiplyThrow<unsigned int>

0x00002BA2 18 ATL::AtlConvFreeMemory<char>

0x00002BB4 107 ATL::AtlConvAllocMemory<char>

0x00002C1F 30 `vector constructor iterator'

0x00002C3D 117 ATL::_ATL_SAFE_ALLOCA_IMPL::_AtlVerifyStackAvailable

0x00002CB2 82 CMap<int,int,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::GetAssocAt

0x00002D04 82 CMap<int,int,CPSound *,CPSound *>::GetAssocAt

0x00002D56 64 GetNormalSurfaceDrawSystem

0x00002D96 64 GetOverlaySurfaceDrawSystem

0x00002DD6 64 GetLightenSurfaceDrawSystem

0x00002E16 64 GetDarkenSurfaceDrawSystem

0x00002E56 64 GetMultyplySurfaceDrawSystem

0x00002E96 64 GetScreenSurfaceDrawSystem

0x00002ED6 64 GetDifferenceSurfaceDrawSystem

0x00002F16 64 GetExclusionSurfaceDrawSystem

0x00002F56 64 GetAdditiveSurfaceDrawSystem

0x00002F96 64 GetSubtractiveSurfaceDrawSystem

0x00002FD6 64 GetStampSurfaceDrawSystem

0x00003016 64 GetXorSurfaceDrawSystem

0x00003056 64 GetRedSurfaceDrawSystem

0x00003096 64 GetGreenSurfaceDrawSystem

0x000030D6 64 GetBlueSurfaceDrawSystem

0x00003116 64 GetGraySurfaceDrawSystem

0x00003156 64 GetFlipSurfaceDrawSystem

0x00003196 64 GetMirrorSurfaceDrawSystem

0x000031D6 64 GetDodgeSurfaceDrawSystem

0x00003216 197 GetSurfaceDrawSystem

0x000032DB 22 CxIOFile::~CxIOFile

0x000032F1 28 CxIOFile::`scalar deleting destructor'

0x0000330D 73 CxIOFile::`vector deleting destructor'

0x00003356 66 CxImageGIF::Decode

0x00003398 66 CxImageGIF::Encode

0x000033DA 75 CxImageGIF::Encode

0x00003425 69 GetLog

0x0000346A 69 GetDLog

0x000034AF 64 GetSoundController

0x000034EF 21 PlaySoundA

0x00003504 40 ATL::_ATL_SAFE_ALLOCA_IMPL::CAtlSafeAllocBufferManager<ATL::CCRTAllocator>::Allocate

0x0000352C 13 ATL::CTempBuffer<char,128,ATL::CCRTAllocator>::~CTempBuffer<char,128,ATL::CCRTAllocator>

0x00003539 17 ATL::CW2AEX<128>::~CW2AEX<128>

0x0000354A 67 ATL::CSimpleStringT<char,0>::Empty

0x0000358D 6 ATL::CSimpleStringT<char,0>::GetLength

0x00003593 13 ATL::CSimpleStringT<char,0>::IsEmpty

0x000035A0 35 ATL::CTempBuffer<char,128,ATL::CCRTAllocator>::AllocateBytes

0x000035C3 186 ATL::CW2AEX<128>::Init

0x0000367D 26 ATL::CSimpleStringT<char,0>::GetBuffer

0x00003697 39 CMap<int,int,CPSound *,CPSound *>::Lookup

0x000036BE 271 ATL::CompareStringWFake

0x000037CD 34 ATL::CompareStringWThunk

0x000037EF 247 ATL::lstrcmpiWFake

0x000038E6 30 ATL::lstrcmpiWThunk

0x00003904 298 ATL::CharLowerWFake

0x00003A2E 30 ATL::CharLowerWThunk

0x00003A4C 298 ATL::CharUpperWFake

0x00003B76 30 ATL::CharUpperWThunk

0x00003B94 30 CPSoundController::GetSound

0x00003BB2 28 ATL::CTempBuffer<char,128,ATL::CCRTAllocator>::Allocate

0x00003BCE 32 ATL::CW2AEX<128>::CW2AEX<128>

0x00003BEE 54 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Find

0x00003C24 32 ATL::CSimpleStringT<char,0>::operator[]

0x00003C44 59 ATL::CSimpleStringT<char,0>::SetAt

0x00003C7F 392 ATL::GetEnvironmentVariableWFake

0x00003E07 30 ATL::GetEnvironmentVariableWThunk

0x00003E25 188 ATL::GetStringTypeExWFake

0x00003EE1 34 ATL::GetStringTypeExWThunk

0x00003F03 11 CMap<int,int,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CPair::~CPair

0x00003F0E 23 CMap<int,int,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CPair::CPair

0x00003F25 55 MakeLower

0x00003F5C 23 CPSoundController::Stop

0x00003F73 17 StopSound

0x00003F84 89 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::LoadStringA

0x00003FDD 107 ATL::CSimpleStringT<char,0>::SetString

0x00004048 18 CMap<int,int,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CAssoc::CAssoc

0x0000405A 78 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Insert

0x000040A8 32 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::LoadStringA

0x000040C8 32 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::CheckImplicitLoad

0x000040E8 29 ATL::CSimpleStringT<char,0>::SetString

0x00004105 19 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Format

0x00004118 117 CMap<int,int,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::NewAssoc

0x0000418D 89 IntToCurrencyString

0x000041E6 77 AfxMessageBoxf

0x00004233 75 AfxMessageBoxf

0x0000427E 18 ATL::CSimpleStringT<char,0>::operator=

0x00004290 101 CMap<int,int,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::operator[]

0x000042F5 47 CPStringTable::Get

0x00004324 15 _S

0x00004333 18 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::operator=

0x00004345 68 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >

0x00004389 147 FindNoCase

0x0000441C 10 ATL::AtlIsValidString

0x00004426 4 CArray<CASH_ITEM,CASH_ITEM &>::GetSize

0x0000442A 28 CArray<CASH_ITEM,CASH_ITEM &>::ElementAt

0x00004446 5 ATL::ChTraitsCRT<char>::StringCompare

0x0000444B 23 CArray<CASH_ITEM,CASH_ITEM &>::CArray<CASH_ITEM,CASH_ITEM &>

0x00004462 31 CArchive::EnsureRead

0x00004481 5 CArray<CASH_ITEM,CASH_ITEM &>::operator[]

0x00004486 134 SerializeElements<CASH_ITEM>

0x0000450C 34 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Compare

0x0000452E 55 GetCashItem

0x00004565 17 GetCashItem

0x00004576 19 ATL::operator==

0x00004589 37 CASH_ITEM::~CASH_ITEM

0x000045AE 31 CASH_ITEM::CASH_ITEM

0x000045CD 61 GetCashItem

0x0000460A 17 GetCashItem

0x0000461B 28 CASH_ITEM::`scalar deleting destructor'

0x00004637 517 CArray<CASH_ITEM,CASH_ITEM &>::SetSize

0x0000483C 10 CArray<CASH_ITEM,CASH_ITEM &>::RemoveAll

0x00004846 57 CArray<CASH_ITEM,CASH_ITEM &>::~CArray<CASH_ITEM,CASH_ITEM &>

0x0000487F 61 CArray<CASH_ITEM,CASH_ITEM &>::Serialize

0x000048BC 28 CArray<CASH_ITEM,CASH_ITEM &>::`scalar deleting destructor'

0x000048D8 77 ATL::CSimpleStringT<char,0>::operator=

0x00004925 18 CPArray<CASH_ITEM,CASH_ITEM &>::CPArray<CASH_ITEM,CASH_ITEM &>

0x00004937 5 CPArray<CASH_ITEM,CASH_ITEM &>::~CPArray<CASH_ITEM,CASH_ITEM &>

0x0000493C 28 CPArray<CASH_ITEM,CASH_ITEM &>::`scalar deleting destructor'

0x00004958 18 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::operator=

0x0000496A 81 CASH_ITEM::operator=

0x000049BB 55 CArray<CASH_ITEM,CASH_ITEM &>::SetAtGrow

0x000049F2 20 CArray<CASH_ITEM,CASH_ITEM &>::Add

0x00004A06 158 AddCashItem

0x00004AA4 1595 InitCashItem

0x000050DF 16 InitCommon

0x000050EF 88 SpliteMoney

0x00005147 18 ATL::CTime::CTime

0x00005159 147 ATL::CTime::CTime

0x000051EC 29 ATL::CTime::operator<

0x00005209 29 ATL::CTime::operator>=

0x00005226 18 CSize::CSize

0x00005238 3 CRect::CRect

0x0000523B 32 CRect::CRect

0x0000525B 23 CRect::Size

0x00005272 3 CRect::operator tagRECT *

0x00005275 18 CRect::IntersectRect

0x00005287 10 CWnd::IsIconic

0x00005291 39 CWnd::MoveWindow

0x000052B8 16 CWnd::GetWindowRect

0x000052C8 22 ATL::CTime::GetTickCount

0x000052DE 12 FinalCommon

0x000052EA 112 TimeStartEnd

0x0000535A 351 LoadWindowPos

0x000054B9 127 SaveWindowPos

0x00005538 1 FinalCommonMulti

0x00005539 51 MoneyToUnit

0x0000556C 9 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::IsEmpty

0x00005575 47 InitCommonMulti

0x000055A4 56 FindFitChannelLevel

0x000055DC 56 IsAvailableChannelLevel

0x00005614 47 CPArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::Find

0x00005643 79 ATL::CSimpleStringT<char,0>::Append

0x00005692 29 ATL::CSimpleStringT<char,0>::Append

0x000056AF 18 ATL::CSimpleStringT<char,0>::Append

0x000056C1 24 ATL::CSimpleStringT<char,0>::operator+=

0x000056D9 18 ATL::CSimpleStringT<char,0>::operator+=

0x000056EB 32 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::operator=

0x0000570B 18 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::operator+=

0x0000571D 18 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::operator+=

0x0000572F 53 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::SetAtGrow

0x00005764 556 IsAvailableNickname

0x00005990 157 IsAvailableClubname

0x00005A2D 546 MoneyToString

0x00005C4F 20 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::Add

0x00005C63 1704 IsRobot

0x0000630B 37 GetTopLevelParentHWnd

0x00006330 17 ATL::CSimpleStringT<char,0>::GetManager

0x00006341 66 FlashWindow

0x00006383 57 IsActiveApp

0x000063BC 64 GetSoundManager

0x000063FC 64 GetStreamSoundManager

0x0000643C 64 GetFontManager

0x0000647C 64 GetLanguage

0x000064BC 35 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::GetManager

0x000064DF 68 FinalCommonClient

0x00006523 18 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >

0x00006535 71 ATL::CSimpleStringT<char,0>::Concatenate

0x0000657C 88 ATL::operator+

0x000065D4 344 CreateWebMultiFont

0x0000672C 1068 InitCommonClient

0x00006B58 19 strcpy_s<5>

0x00006B6B 8 CFileFind::IsDirectory

0x00006B73 11 CPFile::GetAttribute

0x00006B7E 5 ATL::ChTraitsCRT<char>::StringFindString

0x00006B83 24 ATL::ChTraitsCRT<char>::SafeStringLen

0x00006B9B 64 GetAbuse

0x00006BDB 21 CPFile::IsExist

0x00006BF0 64 GetTControlIni

0x00006C30 21 ATL::operator==

0x00006C45 55 MakeUpper

0x00006C7C 46 CLanguage::~CLanguage

0x00006CAA 82 CLanguage::GetIndex

0x00006CFC 305 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Replace

0x00006E2D 35 CLanguage::CLanguage

0x00006E50 230 CArray<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::InsertAt

0x00006F36 106 CLanguage::GetCode

0x00006FA0 324 CLanguage::SetCode

0x000070E4 175 CLanguage::SetIndex

0x00007193 354 CLanguage::AddCode

0x000072F5 196 CLanguage::Create

0x000073B9 36 CNumberImage::CNumberImage

0x000073DD 25 CNumberImage::~CNumberImage

0x000073F6 23 CNumberImage::Create

0x0000740D 28 CArray<CPPackage *,CPPackage *>::GetAt

0x00007429 6 CRect::Width

0x0000742F 7 CRect::Height

0x00007436 14 CRect::operator=

0x00007444 33 CPFile::GetWin32FindData

0x00007465 17 CPSurface::SetClip

0x00007476 4 CPSurface::GetWidth

0x0000747A 4 CPSurface::GetHeight

0x0000747E 4 CArray<CPPackage *,CPPackage *>::GetSize

0x00007482 5 CArray<CPPackage *,CPPackage *>::operator[]

0x00007487 28 CNumberImage::`scalar deleting destructor'

0x000074A3 30 CNumberImage::SetClip

0x000074C1 52 CPSurface::Draw

0x000074F5 36 CompareElements<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>

0x00007519 82 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,CPPackage::INFO,CPPackage::INFO &>::GetAssocAt

0x0000756B 45 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,CPPackage::INFO,CPPackage::INFO &>::Lookup

0x00007598 278 CNumberImage::Draw

0x000076AE 30 CNumberImage::Draw

0x000076CC 284 CNumberImage::Draw

0x000077E8 472 CNumberImage::DrawComma

0x000079C0 680 CNumberImage::DrawUint

0x00007C68 36 CNumberImage::Draw

0x00007C8C 36 CNumberImage::DrawComma

0x00007CB0 135 CPPackage::GetInfo

0x00007D37 21 CPPackage::IsExist

0x00007D4C 77 CPPackage::GetPackageFile

0x00007D99 65 CPPackageManager::FindPackage

0x00007DDA 23 CPPackageManager::GetPackageFile

0x00007DF1 131 CNumberImage::Create

0x00007E74 11 CWebOnline::Destroy

0x00007E7F 11 CWebOnline::SetStingTable

0x00007E8A 44 CWebOnline::CheckErrorChar

0x00007EB6 104 CWebOnline::InitWebPass

0x00007F1E 1 CWebOnline::OnLogin

0x00007F1F 1 CWebOnline::OnLogout

0x00007F20 18 ATL::ChTraitsCRT<char>::StringFindChar

0x00007F32 5 ATL::ChTraitsCRT<char>::CharNextA

0x00007F37 13 ATL::ChTraitsCRT<char>::IsSpace

0x00007F44 4 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::GetSize

0x00007F48 93 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::InitHashTable

0x00007FA5 24 sprintf_s<3>

0x00007FBD 36 ATL::AtlAdd<int>

0x00007FE1 8 CPCriticalSection::Lock

0x00007FE9 8 CPCriticalSection::Unlock

0x00007FF1 22 CPSyncCriticalSection::CPSyncCriticalSection

0x00008007 9 CPSyncCriticalSection::~CPSyncCriticalSection

0x00008010 9 CWebOnline::IsLogin

0x00008019 37 ATL::AtlAddThrow<int>

0x0000803E 39 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<c

0x00008065 64 GetDes

0x000080A5 99 ATL::CSimpleStringT<char,0>::CSimpleStringT<char,0>

0x00008108 49 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Find

0x00008139 26 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >

0x00008153 70 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Right

0x00008199 62 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Left

0x000081D7 125 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Mid

0x00008254 25 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CPair::~CPair

0x0000826D 33 ATL::CSimpleStringT<char,0>::GetBufferSetLength

0x0000828E 40 ATL::CSimpleStringT<char,0>::AppendChar

0x000082B6 185 CWebOnline::WebStringToString

0x0000836F 35 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Mid

0x00008392 89 ATL::operator+

0x000083EB 100 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::TrimLeft

0x0000844F 27 ATL::CSimpleStringT<char,0>::Truncate

0x0000846A 82 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::GetAssocAt

0x000084BC 5 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CAssoc::~CAssoc

0x000084C1 18 ATL::CSimpleStringT<char,0>::operator+=

0x000084D3 74 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::TrimRight

0x0000851D 82 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::RemoveAll

0x0000856F 18 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::operator+=

0x00008581 11 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::~CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<

0x0000858C 34 CMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::`scalar deleting destructor'

0x000085AE 11 CPMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::~CPMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CString

0x000085B9 155 CWebOnline::~CWebOnline

0x00008654 12 ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >::Trim

0x00008660 56 CPMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::CPMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT

0x00008698 34 CPMap<ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *,ATL::CStringT<char,StrTraitMFC<char,ATL::ChTraitsCRT<char> > >,char const *>::`scalar deleting destructor'

0x000086BA 156 CWebOnline::CWebOnline

0x00008756 28 CWebOnline::`scalar deleting destructor'

0x00008772 91 CWebOnline::Create

 

 


: 댓글 0             (^o^) 트랙백 및 댓글을 부탁드립니다. (*^-^)♡(^o^*)   한국어 Translate to English (by Google) 日本語に翻訳します (by excite.co.jp)


qrcode
이 글의 QR 코드입니다.


이 저작물은 비영리, 출처:Kyuseo 프로그래밍 이야기 :: http://soonsin.com 표시하면 스크랩 하실 수 있습니다.

별도로 출처 표시가 되지 않은 저작물은 Kyuseo에게 저작권이 있습니다.   ★──━━ 행복한 하루 되세요 ━━──★

BLOG main image
93년부터 프로그래밍을 독학한 게임 프로그래머 kyuseo의 프로그래밍 정보와 게임 개발 강좌를 주로 다룹니다. by kyuseo

공지사항

카테고리

분류 전체보기 (623)
누리게임즈 (4)
Kyuseo 소개, 잡담 (161)
만든 게임 및 프로그램 (98)
-----------★----------- (0)
개발자 팁 (65)
스마트폰 게임 개발 (47)
C++ 개발 (119)
------------------------♣ (0)
컴퓨터 활용 팁 (98)
게임, 서적, 문화 소감 (31)
------------------------♥ (0)

최근에 받은 트랙백

전체 : 2,957,465
오늘 : 28 어제 : 66