목록전체 글 (608)
kyuseo의 게임 프로그래밍
개요.. CFile 을 여러 곳에서 다수 파일 오픈 하는 방법을 알려드립니다. 방법 CFile::shareDenyNone 을 옵션으로 오픈하면 여러곳에서 동시에 파일오픈 가능하다. CFile file1; if( file1.Open( "C:\\CONFIG.SYS", CFile::modeRead | CFile::shareDenyNone ) == FALSE ) { ASSERT(0); } CFile file2; if( file2.Open( "C:\\CONFIG.SYS", CFile::modeRead | CFile::shareDenyNone ) == FALSE ) { ASSERT(0); }
개요.. CStringf wsprintf str.Format 의 속도 비교해봅니다. CStringf 가 이상하게도 더 빠른 결과를 얻을 수 있습니다. 아무래도 CString::FormatV 함수가 매우 느리기 때문인듯합니다. 또한 릴리즈 버전에서의 최적화가 되기 때문에 일부러 for 문안에 int 형과 같은 타이트한 객체선언을 밖에 할 필요가 없습니다. 상황에 따라 코드의 표현상 이점에 따라 행동하도록 합시다. 비교 분석 -------- 이론상 최적화 코드 ------------- DWORD n; for( int i=0; i
개요.. 마우스 메시지 WM_MOVE / WM_LBUTTONDOWN 의 버그 / 오류 / 문제점을 알려드립니다. 오류 내용 MSDN 에는 아래와 같이 기술되어있지만 실제로는 WM_MOVE xPos = (int)LOWORD(lParam); yPos = (int)HIWORD(lParam); -> WM_MOVE xPos = (short)LOWORD(lParam); yPos = (short)HIWORD(lParam); 으로 해야 합니다. 왜냐하면 음수(-) 값 처리를 하기 위해서는 WORD 형을 INT 형으로 변환할 시 올바르게 변환이 되지 않으므로SHORT 형으로 변환하여야 합니다. 위와 유사한 메시지 목록 #define WM_MOUSEMOVE 0x0200 #define WM_LBUTTONDOWN 0x0201..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://t1.daumcdn.net/tistoryfile/fs4/19_31_7_31_blog74946_attach_16_1625.png?original)
개요.. 디버깅 중에 GetLastError() 의 리턴 값의 정보를 알 수 있는 Visual Studio 에 포함되어있는 오류조회(Error Lookup) 프로그램 사용방법을 알려드립니다. 사용방법 사용방법 : 도구 -> 오류조회 사용예
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://t1.daumcdn.net/tistoryfile/fs5/19_31_7_31_blog74946_attach_15_1501.png?original)
개요.. 아이피 주소(IP Address)를 String, Int, Hex 등의 형식으로 변환하는 유틸리티 프로그램입니다. 데이터베이스에 IP 주소를 용량 감소 및 편의성을 위하여 String 형식이 아닌 Int 형식으로 저장하는 경우 int 를 address 문자열 주소를 변환할 경우 사용하는 프로그램입니다. 스크린샷 핵심 소스코드 void CIPAddressDlg::OnButtonConvertIpHex() { UpdateData(); if( m_LastChange == STR ) { m_nIP = inet_addr( m_strIP ); m_strHex.Format( "%x", m_nIP ); } else if( m_LastChange == INT ) { struct in_addr in; in.s_ad..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://t1.daumcdn.net/tistoryfile/fs4/19_31_7_31_blog74946_attach_16_1618.png?original)
개요.. 기계어 어셈블리어(Assembler)와 mmx, fpu 활용한 빠른(fast) memcpy 소스코드를 작성해봅니다. 개발일지 2002/12/30 어셈블리를 이용하여 기본 제어문 및 루프 테스트함 ( if_test, for_test ) 거꾸로 메모리 복사하는 reverse_memcpy 버전 개발. "1234567890" -> "0987654321" if_test, for_test 기본적인 제어문과 루프의 사용법 습득됨 reverse_memcpy 1 바이트 별로 거꾸로 복사하는 reverse_memcpy 버전은 기존의 memcpy2에 비해 무척이나 느린 현상이 보였다. 그도 당연할 것이 기존의 memcpy2 는 4바이트씩 복사작업을 통하여 루프의 최소화를 하였지만 reverse_memcpy 의 버전..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://t1.daumcdn.net/tistoryfile/fs4/19_31_7_31_blog74946_attach_16_1619.png?original)
개요.. 기계어 어셈블리어(Assembler)와 mmx, fpu 활용한 빠른(fast) memcpy 소스코드를 작성해봅니다. 개발 일지 2002/12/29 어셈을 이용하여 memcpy 제작함 mmx 와 fpu 의 속도에 의심이 들어 관련 자료 찾아봄 과연 mmx 기술은 언제 어느 상황에서 사용할 수 있는 것인가...... 아래와 같은 글이 사실이라면 대용량 복사작업을 제외하면 사용할 수 있는 곳은 거의 없다고 판단됨...... MMX는 FPU 레지스터를 이용하는 것인데 FPU를 안 쓴다니 무슨 뜻인지 모르겠습니다. 매뉴얼을 좀더 자세히 읽어보시길 바랍니다. 그리고 emms 명령이 100클럭이 소요된다는 근거는 어디에 있는 것인가요? 물론 수 킬로 바이트 정도의 작은 데이터를 복사하는데 MMX나 SSE를 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://t1.daumcdn.net/tistoryfile/fs4/19_31_7_31_blog74946_attach_16_1617.png?original)
개요.. 게임과 같은 경우 하나의 컴퓨터에서 하나의 프로그램만 실행시키기를 원하는 경우가 많습니다. 뮤텍스(Mutex)를 이용하여 하나의 프로그램(게임)만 실행하는 소스코드와 방법을 설명드립니다. 방법 아래와 같이 작업하고 추가로 다음과 같은 코드를 추가하여야 리소스 누출을 방지할 수 있습니다. 1. CAppApp::CAppApp() { m_hMutex = NULL; } 2. BOOL CAppApp::InitInstance() { // 프로그램중복실행을막기위한뮤텍스생성 m_hMutex = CreateMutex( NULL,TRUE, "SEARCH_EYEONLlNE_2_RWEHO_FWEO_GWEOG_MUTEX"); if( m_hMutex && GetLastError() == ERROR_ALREADY_EXIS..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://t1.daumcdn.net/tistoryfile/fs6/19_31_7_31_blog74946_attach_15_1595.png?original)
개요.. 내 컴퓨터의 아이피 주소 (IP Address)를 얻는 소스코드를 소개 합니다 소스코드 함수 CString GetMyIP() { CString ipAddr; WSADATA wsaData; WORD wVersionRequested = MAKEWORD( 2, 0 ); if( WSAStartup( wVersionRequested, &wsaData ) == 0 ) { char name[256]; if( gethostname( name, sizeof( name ) ) == 0 ) { PHOSTENT hostinfo = gethostbyname( name ); if( hostinfo != NULL) { ipAddr = inet_ntoa( *( struct in_addr* ) *hostinfo->h_addr..
개요.. 매우 편리하고 유용한 MFC 템플릿(Template) 클래스 CMap 의 사용 주의 사항을 설명 드립니다. 주의사항 CMap 사용하기 무척 편리합니다. 특히 스트링(String)맵의 경우 사용용도가 높으나 아래와 같이 오류발생 가능이 있는 코드가 존재하니 주의해서 사용합니다. 올바른 코드 CMap map; map["One"] = 1; map["Two"] = 2; CString s1 = map["One"]; CString s2 = map["Two"]; CString s3 = map["Three"]; CString s4 = map[ NULL ]; 문제의 코드 char* sz = "One"; C..