using System; using System.Runtime.InteropServices; public delegate bool CallBack(int hwnd, int lParam); public class EnumReportApp { [DllImport("user32")] public static extern int EnumWindows(CallBack x, int y); public static void Main() { CallBack myCallBack = new CallBack(EnumReportApp.Report); EnumWindows(myCallBack, 0); } public static bool Report(int hwnd, int lParam) { Console.Write("Window handle is "); Console.WriteLine(hwnd); return true; } }
example 0)
void (*p_func)(char *) = NULL;
extern void my_print(char *s);
void test(char *s)
{
p_func = my_print;
p_func(s):
}
example 1)
float Plus (float a, float b) { return a+b; }
float Minus (float a, float b) { return a-b; }
float Multiply(float a, float b) { return a*b; }
float Divide (float a, float b) { return a/b; }
float Calculate(float a, float b, float (*p_Function)(float, float))
{
float result = p_Function(a, b);
return result;
}
int main(void)
{
Calculate(10, 20, &Plus);
return 0;
}
example 2)
typedef struct
{
void(*callback_fn)(void);
} test_callback_t;
extern void test1();
extern void test2()
void test(void)
{
test_callback_t callback[2];
/*원래는 함수이름 앞에 &를 붙이는 것이 더 정확하고 이식성이 좋다*/
callback[0].callback_fn = test1;
callback[1].callback_fn = test2;
/*Call callbacks*/
callback[0].callback_fn();
example 1)
float Plus (float a, float b) { return a+b; }
float Minus (float a, float b) { return a-b; }
float Multiply(float a, float b) { return a*b; }
float Divide (float a, float b) { return a/b; }
float Calculate(float a, float b, float (*p_Function)(float, float))
{
float result = p_Function(a, b);
return result;
}
int main(void)
{
Calculate(10, 20, &Plus);
return 0;
}
example 2)
typedef struct
{
void(*callback_fn)(void);
} test_callback_t;
extern void test1();
extern void test2()
void test(void)
{
test_callback_t callback[2];
/*원래는 함수이름 앞에 &를 붙이는 것이 더 정확하고 이식성이 좋다*/
callback[0].callback_fn = test1;
callback[1].callback_fn = test2;
/*Call callbacks*/
callback[0].callback_fn();
callback[1].callback_fn();
return;
}
콜백은 함수를 직접 호출하지 않고 다른 함수가 대신 호출하게 하는 것입니다.
typedef struct
{
int number;
const char* name;
} S;
int cmp_by_number(const void* p1, const void* p2)
{
const S* ps1 = p1;
const S* ps2 = p2;
return ps1->number - ps->number;
}
int cmp_by_name(const void* p1, const void* p2)
{
const S* ps1 = p1;
const S* ps2 = p2;
return strcmp(ps1->name, ps2->name);
}
S array[10];
qsort(array, 10, sizeof(S), cmp_by_number); // number 순으로 정렬
qsort(array, 10, sizeof(S), cmp_by_name); // name 순으로 정렬qsort 입장에서는 주어진 데이터를 어떻게 정렬할지 미리 알 수는 없으므로
qsort를 호출하는 쪽에서 "이런 방법으로 정렬하라"는 정보를 콜백을 통해
알려주는 것입니다.
qsort를 호출하는 쪽에서 "이런 방법으로 정렬하라"는 정보를 콜백을 통해
알려주는 것입니다.
이것도 콜백의 일종이라고 볼 수 있겠지요. 만약 call_back_func_1,... 등이
여러 개 있고 test_func에서 호출할 함수를 미리 결정할 수 없다면 함수포인터를
이용한 콜백이 좋은 방법입니다. 예를 들어
여러 개 있고 test_func에서 호출할 함수를 미리 결정할 수 없다면 함수포인터를
이용한 콜백이 좋은 방법입니다. 예를 들어
void call_back_func_1(int a);
void call_back_func_2(int a);
int answer;
switch (answer)
{
case 1:
test_func(call_back_func_1, answer);
break;
case 2:
test_func(call_back_func_2, answer);
break;
}http://msdn.microsoft.com/ko-kr/library/ms173171.aspx
'유니티 > 스크립트' 카테고리의 다른 글
| Animation and Follow Camera (0) | 2014.04.18 |
|---|---|
| 하이브리드 app - 1일차 (0) | 2014.04.14 |
| c#의 콜백함수란? (0) | 2014.04.10 |
| 유니티 event delegate 예제 (1) | 2014.04.10 |
| PlayerPrefs 배열로 저장하기. (0) | 2014.04.08 |
| NGUI 스크롤뷰 grid 아이템 생성시 순서대로 생성되게 하기. (0) | 2014.04.08 |
Trackback 0 And
Comment 0
버튼을 누르면 해당 오브젝트 삭제
'유니티 > 스크립트' 카테고리의 다른 글
| 하이브리드 app - 1일차 (0) | 2014.04.14 |
|---|---|
| c#의 콜백함수란? (0) | 2014.04.10 |
| 유니티 event delegate 예제 (1) | 2014.04.10 |
| PlayerPrefs 배열로 저장하기. (0) | 2014.04.08 |
| NGUI 스크롤뷰 grid 아이템 생성시 순서대로 생성되게 하기. (0) | 2014.04.08 |
| 유니티 안드로이드 확장 개발 - jar 파일(이클립스연동) (3) | 2014.04.02 |
Trackback 0 And
Comment 1
보통 퀘스트 메니저를 두고 서버 접속시 받아온 퀘스트 정보로 초기화후 모든 행동의 코드 조각들에서 퀘스트 메니저로 이벤트를 날립니다( 이벤트 구현 방식은 하기 나름인데 보통 c#을 사용중이시면 대리자를 이용 합니다 ) 이 때 현재 어떤 행동인지와 값(보통 특정아이템 x개 수집 같은퀘스트의 경우 값이 필요 할수도 있습니다.)을 나타내는 명세를 이벤트에 같이 실어 보내고 퀘스트 메니저에선 이 이벤트의 명세를 보고 해석 하여 퀘스트의 해결 여부를 판단하였다가 서버에 알리는 식으로 하는게 보통 쓰는 방식 입니다. 행동의 종류가 많을 수록 코드 관리가 어려워 지는데( switch case 도배.. ) 보통은 이쯤 되면 상태 기계화 시켜 또 세분하 하여 관리 하면 됩니다. 스테이트 패턴을 적용해도 좋구요..
이벤트 사용법
스테이트패턴
'유니티 > Note' 카테고리의 다른 글
| 하이브리드 app - 2일차 (0) | 2014.04.15 |
|---|---|
| 유니티 샘플예제 penelope (0) | 2014.04.14 |
| 유니티 퀘스트 관련 (0) | 2014.04.10 |
| 유니티 스크립트 호출 순서 제어 (0) | 2014.04.09 |
| 유니티 인벤토리 관련 구현 (0) | 2014.04.07 |
| delegate, action, event 활용 관련 (0) | 2014.04.07 |
Trackback 0 And
Comment 0





