안녕하세요. 전역 변수 사용에 대해...

7 views
Skip to first unread message

Farts

unread,
Oct 9, 2007, 11:20:02 AM10/9/07
to squirrelusers-kr
안녕하세요. 이번 프로젝트에 Squirrel을 도입할려고 합니다. 아직 초보라서... ;;;

다름이 아니라 SqPlus를 사용해서 바운딩하는데는 성공했지만, 전역 변수를 쓰면 에러가 납니다.

구조는 MFC처럼 이벤트 함수를 불러들이는 방식인데, 이 함수에서 전역 변수를 쓰면... 예를 들어,

local bTestLocal = false;

function OnUpdate( fElapsed )
{
if ( bTestLocal == false )
{
bTestLocal = true;
}
}

.
.
.

SquirrelFunction<void> callFunc( _T( "OnUpdate" ) );
callFunc();

이런 식으로 쓰는데, bTestLocal을 OnUpdate()에서 사용하게 되면 에러를 일으키게 되더라고요.

전역 변수를 쓰는 방법이 없을까요? 제가 생각하기엔, 스택 순서에 관련된 문제인거 같은데 전혀 감이 잡히질 않네요.

도움 부탁드립니다.

Message has been deleted

idkay0

unread,
Oct 9, 2007, 10:39:34 PM10/9/07
to squirrelusers-kr
위에 보여주신 스크립트의 오류와 함수호출 부분에 오류가 있습니다.

bTestLocal <- false; // local bTestLocal = false;

function OnUpdate( fElapsed )
{
if ( bTestLocal == false )
{
bTestLocal = true;
}

}

Squirrel에서 local은 지역변수를 의미합니다.
CompileScript로 스크립트를 불러들이고 RunScript로 실행을 하게되면, local 키워드로 생성된 변수는 스크

트가 종료되기 전까지만 유효합니다.
즉 스크립트가 종료되면, 생각하는 것과는 다르게 OnUpdate항목만 남고, bTestLocal 변수는 없어지게 됩니
다. 그 상태에서 Sqplus로 OnUpdate함수를 호출하게 되면, 함수안에 있는 bTestLocal 변수의 경우 유효한
변수가 아니기 때문에 호출에 문제가 생깁니다.
스크립트 호출이 끝나도 유효한 전역변수를 등록하고 사용하려면 " bTestLocal <- false; " 이렇게 선언 하시
면 됩니다.
" <- "키워드는 http://squirrel-lang.org/doc/squirrel2.html#d0e909 에서 확인 하

SquirrelFunction<void> callFunc( _T( "OnUpdate" ) );

-> 함수를 등록에는 문제가 없습니다.

callFunc(0); // callFunc();
위에 선언한 OnUpdate함수는 fElapsed라는 이름의 매개변수를 필요로 합니다. SquirrelFunction으로 함수
를 만들고 함수를 호출할 때 매개변수에 값을 넣어야 합니다.

Farts

unread,
Oct 9, 2007, 10:58:13 PM10/9/07
to squirrelusers-kr
헉~ "<-" 이것의 사용법을 몰랐는데... 그런것이 있었군요...

감사합니다. 이렇게 빨리 답변을 주시다니...

다시 한 번 찬찬히 매뉴얼을 읽어야 겠네요...

PS. 함수호출에서 매개변수를 빼먹은건 오타... ^^;; 소스가 회사에 있고 집에서 작성한 스레드라...

Reply all
Reply to author
Forward
0 new messages