2011/02/21 20:19

단일이든 다중이든 테이블을 훑어서 모든 요소들을 임의의 컨테이너에(이 코드는 게임브리오 내의 컨테이너) 몰아넣는 함수 입니다.

readStringTableToNiArray 만 노출시켜서 사용.


 

[-] Collapse
void readStringTableToNiArray(lua_State *L, const char* s,
                              NiTObjectArray<NiFixedString> &kOut)
{
    lua_pushstring(L, s);
    lua_gettable(L, LUA_GLOBALSINDEX);
    recursiveReadMultipleStringTable(L, kOut);
}

void recursiveReadMultipleStringTable(lua_State *L,
                                      NiTObjectArray<NiFixedString> &kOut)
{
    lua_pushnil(L);

    while(lua_next(L, -2))
    {
        if (lua_istable(L, -1))
        {
            recursiveReadMultipleStringTable(L, kOut);
        }
        else
        {
            kOut.Add(lua_tostring(L, -1));
        }
        lua_pop(L, 1);
    }
}
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Play me, I'm yours
2011/02/21 20:09

c에서 lua 의 테이블 맴버 함수를 호출하는 의사코드 같은(?) 코드 입니다.

인자를 push 하기 전에 테이블을 첫번째 스택에 올려놔야 해당 함수 내에서 self를 사용할 수 있다는 사실을 알아내는데 삽질을 좀..

 


[-] Collapse

lua_pushcclosure(L, NiLuaMgr::on_error, 0);
int errfunc = lua_gettop(L);
lua_getfield(L, LUA_GLOBALSINDEX, "table name");
lua_getfield(L, -1, "function name");
if (lua_isfunction(L, -1))
{
    // 테이블 맴버 함수 이므로 숨겨진 첫번째 인자인 self 를
    // 위해 테이블을 푸시해준다.
    lua_getfield(L, LUA_GLOBALSINDEX, "table name");

    // 인자들 push
    push(L, 1);
    push(L, 2);

    // 임시용으로 인자 두개, 리턴값 한개인 함수 호출
    if (lua_pcall(L, 3, 1, errfunc) != 0)
    {
        lua_pop(L, 1);
    }
}
else
{
    // error handle
}
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Play me, I'm yours
2010/11/10 12:52

디버깅시 가끔 기호가 로드되지 않아서 현재 단의 스택과 상위 스택은 kernel 이나 기본 라이브러리 쪽만 나오고

정작 정보가 필요한 사용중인 외부 라이브러리들의 스택들은 몽땅 비활성화 될 때가 있는데 (기호를 분명히 모두 로딩했던

기억(?)이 있음에도 불구하고 ㅋㅋ)

이럴때는 Microsoft 기호 서버로부터 기본 라이브러리 스택들의 기호를 로드하면 중간에 끼어 있는 다른 라이브러리 스택들까지 모두 활성화 될 수 있다.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Play me, I'm yours
2010/11/08 16:36
너의 우주와, 그 곳으로 가는 급행 우주선의 부재.

크리에이티브 커먼즈 라이선스
Creative Commons License

'그 밖에 생각, 하고싶은 말' 카테고리의 다른 글

우주  (0) 2010/11/08
단것  (0) 2010/08/16
어른아이  (0) 2010/05/23
그래서 사람은 더 외롭다.  (0) 2010/05/22
비 오는날  (0) 2010/05/08
이 쯤에서 한번 짚어보기  (0) 2010/04/13
Posted by Play me, I'm yours
2010/10/27 18:23

 

메세지 :
Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call.  This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

 

관련 링크 :

http://www.gamedev.net/community/forums/topic.asp?topic_id=308819

라이브러리와 참조 헤더의 어긋남으로 인해 기존파일을 삭제 한 뒤 리빌드로 해결.

 

project 속성(Properties)-> C/C++ -> 고급 -> 호출규칙(Call convention) 확인

소스코드에서 __stdcall 을 써줬다면 __stdcall로 맞춰준다.
(if you used __stdcall in your DLL project, then set call convention "__stdcall")

호출 규칙을 소스코드와 일치시키는 것임.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Play me, I'm yours
2010/10/27 17:31


1. 백그라운드 스레드에서 critical section 에 진입한 뒤 메인스레드에서 같은 섹션에 접근하여 락이 걸렸다.

헌데 백그라운드 스레드의 해당 구문에 sleep()을 주니 준만큼 당연히 메인스레드에 락이 걸리는 시간도 그만큼 추가되었다.

백그라운드 스레드를 쉬게 하려다가 메인스레드가 덤으로 쉬게 된 현상이다.

 

2. 스레드에 적용된 모든 동작에 critical section을 하나만 쓰니 관련없는 동작끼리에도 락이 걸렸다.

각각의 목적이 다른 자료형이나 동작들에 개별의 critical section을 써야겠다.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Play me, I'm yours
2010/08/27 14:54

저는 솔루션 탐색기는 거의 안쓰고 클래스 뷰만 주로 쓰는데, 클래스가 선언되어 있지 않은 파일들은 클래스 뷰에서
찾아갈 방법이 없죠. 그래서 아래와 같은 방법을 생각해봤어요.
그냥 더미용 클래스를 선언해서 클래스뷰에도 뜨게하는 방법입니당.

 

- 프리컴파일 하는 디파인 헤더나 암튼 우선적으로 컴파일되는 헤더에 다음 매크로 선언.


사용못하게 생성자는 private 로..
#define DECLARE_DUMMY_CLASS(n) \
 class _PORTAL_TO_##n##_HEADER { private: _PORTAL_TO_##n##_HEADER() {}; }

 

- 목표 헤더파일

ex) stdafx.h

DECLARE_DUMMY_CLASS(STDAFX);

클래스 뷰에 _PORTAL_TO_STDAFX_HEADER 라고 생성 됨.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Play me, I'm yours
2010/08/16 21:44


 

아.. 사라지지 말아요

어떻게 이런 표현을 지어낼 수 있을까.

이들의 노래를 들으면 건강해지는 것 같아.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

'음악' 카테고리의 다른 글

디어 클라우드 - 사라지지 말아요  (0) 2010/08/16
김윤아 - 가만히 두세요  (0) 2010/05/04
디어 클라우드 in SoundHolic  (0) 2009/05/23
디어 클라우드 - 늦은 혼잣말  (0) 2009/05/12
친구라는건  (0) 2008/12/16
러브레터..  (0) 2006/10/03
Posted by Play me, I'm yours
2010/08/16 00:58

난 단것이 좋아.
음식이 됐던, 사람이 됐던, 무엇이 됐던.
그래서 어딘가가 잘 썩나보다.
저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

'그 밖에 생각, 하고싶은 말' 카테고리의 다른 글

우주  (0) 2010/11/08
단것  (0) 2010/08/16
어른아이  (0) 2010/05/23
그래서 사람은 더 외롭다.  (0) 2010/05/22
비 오는날  (0) 2010/05/08
이 쯤에서 한번 짚어보기  (0) 2010/04/13
Posted by Play me, I'm yours
2010/05/23 13:19
나는 아직도 하고싶은 것만 하려고 하고 있는 것 같다.
문제들이 쌓여있는 실제의 세계에서 벗어나려고 발버둥 친다.

어렸을 때 어른들이 문제를 해결하고 있으면 옆에 서서 가만히 지켜만 보던 어린아이처럼
이제는 내가 그 어른이지만, 옆으로 물러나서 지켜만 본다.
내 문제인데 내가 옆으로 비켜서서..
해결 되는 것 없이 시간은 흘러만 간다.

저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

'그 밖에 생각, 하고싶은 말' 카테고리의 다른 글

우주  (0) 2010/11/08
단것  (0) 2010/08/16
어른아이  (0) 2010/05/23
그래서 사람은 더 외롭다.  (0) 2010/05/22
비 오는날  (0) 2010/05/08
이 쯤에서 한번 짚어보기  (0) 2010/04/13
Posted by Play me, I'm yours