IT 취미생활.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
'분류 전체보기'에 해당하는 글(191)
2008.03.10   간단한 Callback Function 예제
2008.03.10   [P]중복된 Header 제거 하는 간단한 방법 중 하나는??
2008.03.10   [펌]Tiny singleton helper class
2008.03.09   세탁기가 없이 빨래를 할때 선택 할 수 있는 방법들.... 2
2008.03.09   Bit 연산을 이용한 Flag 사용하기
2008.03.09   한글주소를 영문으로 변경하는 싸이트
2008.03.09   분노해결 순서도
2008.03.09   [Dshow] DirectShow SDK Filter Graph Editor
2008.03.09   [Dshow] 연결된 필터 이름 알아오기
2008.03.09   파일명, 라인정보를 보여주는 에러 메세지 박스 만들기 2
2008.03.09   2차 배열 동적 할당 - 일반 및 개선 2


간단한 Callback Function 예제
간단한 Callback 예제 C / C++

2007/07/28 08:35

복사 http://blog.naver.com/liezzang99/40329125

// TestCallbackFunction.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


#define BOOL unsigned int
#define TRUE 1
#define FALSE 0

typedef BOOL (*RonieTest_Callback)( int nValue );

typedef struct
{
 int number;
 char *name;
 RonieTest_Callback bCount_CB;
} WmMyInfo;


BOOL fnConditionCallback_cb( int nValue )
{
 BOOL bRet = 0;
 if( 0 == (nValue % 2) )
 {
   bRet = 1;
 }
 return bRet;
}


WmMyInfo *TestLoopFunction( WmMyInfo *pInfo )
{
 while(1)
 {
  pInfo->number++;
  if( pInfo->number == 10 )
  {
   BOOL bRet = pInfo->bCount_CB( pInfo->number );
   if( bRet == TRUE )
   {
    pInfo->name = new char[5];
    memset( pInfo->name, 0, sizeof(char)*5 );
    strncpy( pInfo->name, "Even", strlen("Even") );
    return pInfo;
   }

   return  pInfo;
  }
 }
}


int main(int argc, _TCHAR* argv[])
{
 WmMyInfo *pMyInfo = new WmMyInfo;
 pMyInfo->number = 0;
 pMyInfo->bCount_CB = fnConditionCallback_cb;

 pMyInfo = TestLoopFunction( pMyInfo );

 printf( "Number : %s", pMyInfo->name );


 delete []pMyInfo->name;
 delete pMyInfo;

 return 0;
}



[P]중복된 Header 제거 하는 간단한 방법 중 하나는??

중복된 헤더 제거 하는 간단한 방법 중 하나는??

Test.h

#ifndef TEST_H
#define TEST_H

// 헤더 내용 기술


#endif



------------------------


Code.h

#ifndef CODE_H

#define CODE_H

// 내용 기술



#endif


두 헤더에서 중복된 형태를 피 할 수 있습니다.

그럼 고운하루.



[펌]Tiny singleton helper class

Introduction

Sometimes we have to code with 'singleton'. If you don't know what Singleton is, you can read about it in many Design Pattern books. Singleton principle is really simple.

As you know, if you use reference pointer for singleton object, then you must delete it when program terminates. But it will be good because it does 'late instance'.

I want to terminate singleton object automatically, and instance lately. So, I coded this.

Good things:

  • Late instance.
  • Safe terminate automatically.
  • Separated code for Object and Singleton.

Here is my tiny singleton helper class - CSingletonT<>, and I hope it helps you.

//
// Using singletonT class
//
#include "SingletonT.h"
// test class
class CObj
{
protected:
    CObj(){ x = 0 ; TRACE("Created CObj\r\n"); }
public:
    virtual ~CObj(){ x = 0 ; TRACE("Deleted CObj\r\n");}
    int x;
};
// Testing
void CTestSingleTDlg::OnButton1()
{
    // TODO: Add your control notification handler code here
    // if first call, then singleton object will instance ( instance lately )
        CObj* o = CSingletonT<CObj>::GetObject();
    // use singletone object
    o->x ++;
    TRACE("o->x = %d\r\n",o->x);
}
------------------------------------------------------------------------------------
싱글톤에 조금은 벗어났지,활용 할 수 있는 방법은 많다고 생각 됩니다.
원문을 보고 싶으시다면  아래로...
http://www.codeproject.com/cpp/singlet.asp
우리 나라 분이 작성한 글입니다.


세탁기가 없이 빨래를 할때 선택 할 수 있는 방법들....

세탁기가 없이 살고 있는지 벌써 6개월째로 접어 들고 있습니다.
빨래 하는게 무척이나 힘들군요.

세상의 모든 어머니들에게 경의를 표합니다. 아니 주부님들에게요.!!

손가락에는 주부님들만 걸린다는 주부 습진으로 인해서,
회사 출근시 지문이 찍히지 않아서, 밍키.최(회사 회계팀 사원)님을 고생 시키고 있습니다.

금일도 양말 빨래를 열심히 하며 어떻게 하면 빨래를 쉽게 할 수 있을까?
여러가지 방법들을 떠 올렸습니다.

이중 괜찮은게 있으면 실천 해보세요.

방법s
1. 빨래를 하지 않는다.
2. 세탁기를 구입해서 빨래를 한다.
3. 옷을 사서 일주일 단위로 입고 버려 버린다.
4. 일주일에 한번씩 부모님 집에 간다
    - 선물 대신 빨래 주머니 준비
5. 결혼 한다. 퍽 ==3 x. X )
6. 열심히 손빨래 한다.
7. 세탁소에 맡긴다.

ㅡㅡ;;;;; 모하는 짓이나교 하실분도 있는데, 심심해서 적어봤습니다.

자취 하시는 분들 고무 장갑은 필수 입니다.

사용자 삽입 이미지



Bit 연산을 이용한 Flag 사용하기
윈도우에 보면 항상 윈도우 스타일을 설정 할때 | 를 이용하여 여러개의
bit값을 or를 하게 된다.

예를 들어 아래와 처럼 말이다.
WS_POPUP | WS_CHILD | WS_ ... 이런식으로 BIT OR 연산으로 플래그를 사용한다.
어떤 기능을 수행하는 함수를 만들때 여러가지 옵션에 따라서 수행 방법을 달리 하거나 할때 유용하다.
PlatForm API를 만들때 종종 사용이 된다. 위에서도 언급 했듯이 윈도우 스타일 ~ Popup 스타일등


그런 옵션을 만드는 방법은?

1. bool형 인자를 각각의 옵션 갯수대로 만든다.
   이것은 몇개 없을경우(1,2개 정도)에는 괜찮지만 많아 지면 각각의 옵션마다
   전부다 if를 해야하는 관계로 무척 복잡하다.
   초급용.


2. int형 하나를 만들어서 그 값을 if해서 1,2,3,4로 검출한다.
   이것은 하나의 변수로 여러 옵션을 만들 경우 유용하다.
   그러나 #define을 잘 쓰지 않으면 몇번이 어떤 옵션인지 헷갈린다.
   중급용.


3. dw형(DWORD) 윈도우 스타일 플래그를 만든다.
   반드시 #define과 함께 쓰고 비트 연산을 한다.
   무척 유용하다. 윈도우에서 자주 쓰는 스타일이다.
   고급용이다.


1,2 번은 대충 짐작을 할것이고 3번에 대해서 알아보자.
2번의 경우 각각을 if 하는데 어떤 기능인지 헷갈린다고 했다.
3번 같은 플래그는 일단. 기능별로 분리를 하고 #define을 해야한다.

#define FLAG_AAA 0x001
#define FLAG_BBB 0x002
#define FLAG_CCC 0x004
#define FLAG_DDD 0x008
#define FLAG_EEE 0x010

이런식으로 정의 한다.


우리가 함수에서 플래그를 넣을때
dwFlags = FLAG_AAA | FLAG_BBB | FLAG_CCC;
이렇게 넣었다고 가정해보자.

| 는 비트 OR이므로
FLAG_AAA = 00001
FLAG_BBB = 00010
FLAG_CCC = 00100

이렇게 된다. (이진수로)
다 합치면(OR)하면 00111이다.



그러면 그 인자를 받아서 detect해보는 작업을 하겠다.

if( FLAG_BBB & dwFlags )
이렇게 하면 이 값이 true가 된다.

왜냐?
비트 연산을 한번더 해보면
dwFlags는 이진수로 00111이고.
FLAG_BBB는 이진수로 00010이다.(0x002)
& (AND) 연산을 해보자.
AND는 둘다 1일때만 결과가 1이다.
00111
00010
-----
00010 이 결과이다.
이것은 0보다  큰 값이므로 true가 된다.

우리가 처음에 FLAG_AAA | FLAG_BBB | FLAG_CCC를 했으므로
if( FLAG_DDD & dwFlags )를 해보면..
00111
01000
----- &하면
00000

if의 결과는 false이다.

-0- 기억이 가물 가물한데 내가 썼던 글인가????


한글주소를 영문으로 변경하는 싸이트
아마존이나 이베이에서 물품 주문하거나 샘플을 주문 할때
항상 영문 주소를 어떻게 적어야 하나 고민 하는데,
아래 싸이트에서 쉽게 해결

사실 영어 주소 쓰는거쯤이야 알고 있지만
누군가 필요 할 것 같아서


http://www.etpost.co.kr/service/zipcode/zip_eng.php?mod=h


분노해결 순서도
사용자 삽입 이미지


나부터 실천 해야 하지 않을까 생각 합니다.


[Dshow] DirectShow SDK Filter Graph Editor
필요한 파일
-----------------------------------------------
   - 파일명: graphedt.exe
   - 정식명칭: DirectShow SDK Filter Graph Editor
-----------------------------------------------

그래프에디터는 SDK를 설치하지 않아도 동작합니다.
따라서 디버깅할 때 편리합니다.

system에 등록 하기 위해서는 아래와 같이 dll을 등록 해야 합니다.

* proppage.dll
regsvr32로 등록합니다.

실행 창에서
regsvr32.exe proppage.dll


[Dshow] 연결된 필터 이름 알아오기

관련 Site에서 간단하게 도움을 받아서 작성한 Function입니다.

* Wince에서 NullPlayer를 작성하여 OS에서 연결되는 Filter 정보를
확인하고자 하여 아래 함수를 작성하였습니다.

코드 :

HRESULT GetConnectFiltersName( IGraphBuilder *pGraph )
{
 IEnumFilters *pEnumFilter = NULL;
 HRESULT hr =  pGraph->EnumFilters( &pEnumFilter );
 IBaseFilter *pBaseFilter = NULL;
 FILTER_INFO stFilterInfo;

 while(  S_OK == pEnumFilter->Next( 1, &pBaseFilter, NULL ) )
 {
  pBaseFilter->QueryFilterInfo( &stFilterInfo );
  char sztmp[256];
  ::WideCharToMultiByte(CP_ACP, 0, stFilterInfo.achName, -1, sztmp, 256, NULL, NULL);
  ::printf( "%s\r\n", sztmp );
  pBaseFilter->Release();
 }

 pEnumFilter->Release();
 return S_OK;
}


그럼 고운하루 되세요




파일명, 라인정보를 보여주는 에러 메세지 박스 만들기
 #define 스크립트를 이용하면 쉽게 파일명과 줄번호가 출력되는 메세제 박스를
만들 수 있습니다..

아래 코드를 참조 하세요

코드:
#include <stdio.h>
#include <windows.h>
#include <stdarg.h>
void ShowMessage(const char* strFormat, ...)
{
static char strBuff[512];
va_list args;
va_start(args, strFormat);
vsprintf(strBuff, strFormat, args);
va_end(args);
MessageBox(0, strBuff, "Message", MB_ICONERROR);
}





#define SHOW_ERROR(Msg) {

ShowMessage("%s(%d) %s \n", __FILE__, __LINE__, Msg );
}











#define CHEAK_ERROR(Flg)
{
if (!Flg)
ShowMessage("%s(%d) %d \n", __FILE__, __LINE__, Flg );
}



int main()
{
char* pSzString = NULL;
CHEAK_ERROR(pSzString);
if (s == NULL)
{
SHOW_ERROR(" Error NULL Pointer Here");
}
return 0;
}


*  개인적으로는 Debug Level에 따라서 출력이 되도록 수정하는 것도 좋을 것 같습니다
    또한 가변인자를 활용하여 여러가지의 값을 가지도록 만들어 보아요~!


2차 배열 동적 할당 - 일반 및 개선
일반 적인 2차 배열 동적 할당


코드:
template <typename Ty>
Ty **alloc2DArray(int width, int height)
{   
 Ty **arr = new Ty*[height];   
 for(int i=0; i<height; i++)   
 {       
  arr[i] = new Ty[width];  
 }   
 return arr;
}
template <typename Ty>
void free2DArray(Ty **&arr, int height)
{  
 for(int i=0; i<height; i++)   
 {       
  delete []arr[i];       
  arr[i] = 0;   
 }  
 delete []arr;   
 arr = 0;
}


고급
int **imatrix( int w, int h ) 
{
 int i;
 int **m;
 m = new int * [h]; 
 if( !m )
  PutError("memory alloc failure in imatrix()"), exit(0);
 m[0] = new int [ w * h ]; 
 if( !m[0] )
  PutError("memory alloc failure in imatrix()"), exit(0);
 for( i = 1; i < h; i++ ) { 
  m[i] = &m[0][ i * w ];
 }
 return m;
}

고급으로 할당 하는 방법에 대해서 눈여겨 보세요.


BLOG main image
취미생활
 Notice
 Category
분류 전체보기 (191)
매일매일갱생 (83)
서버개발 (1)
임베디드개발 (12)
Programming (80)
Personal Projects (6)
유용한 프로그램 (0)
 TAGS
퇴사 Brazil debugging Linux 미라지폰 티스토리 초대장 english email 서태지 Java Windows Mobile6.0 음식 Algorithm ISDB-T MP3 warning isdbt C 군대 spam mail project 알고리즘 VC++ DirectShow Error Case 개발자 It English 티스토리초대 Wince5.0 벨소리 변경 Dshow 1seg DVB C++ DVB-T M480 Debug 출장 영어 이메일
 Calendar
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
 Recent Entries
 Recent Comments
 Recent Trackbacks
 Archive
 Link Site
zextor
괴짜 프로그래머의 일상사~@@
Gag & Peace, and more..
Kazakhstan Almaty.......
Min-A
Sadgarret
Steve Yoon's log
가슴 뛰는 삶을 살아라
오스틴 파워
GUI sin
melanie parker_Lady
제레미의 TV 2.0 이야기..
 Visitor Statistics
Total :
Today :
Yesterday :
rss