한가지 더 문제가 생겨서 질문 올립니다.
순수루아로 구현한 lua에서의 C함수 호출반환값과 팅커로 호출 반환한 값의 호환?문제입니다.
설명하기 쉽게 간단한 코드를 직접 써보겠습니다.
Code: Select all
--Lua코드. ctestobj는 CTest class형.
function Sample()
{
data = ctestobj:Get()
ctestobj:Set( data ) -- 팅커함수에서 받은 포인터값를 팅커함수로 넘겨준것
C_Set( data ) -- 팅커함수에서 받은 포인터값을 일반C함수로 넘겨준것(팅커X순수루아)
}
라는 lua코드가 있을때...
// cpp쪽 구현은 다음과 같습니다.
class CTest;
extern CTest g_data;
class CTest
{
public:
CTest() {}
~CTest() {}
CTest* Get( void )
{
return &g_data;
}
void Set( CTest *pData1 )
{
// 이때의 pData1
}
};
CTest g_var1, g_data;
int C_Set( lua_State *L )
{
CTest *pData2 = lua_touserdata( L, 1 );
// 이때의 pData2
return 0;
}
C_Set()은 순수루아로 호출되는 c함수입니다.
이때 lua에선 같은 data를 넘겨주는데...
Set()에서 받는 pData1과 C_Set()에서 받는 pData2가 서로다르더군요.
이경우는 Set()에서 받는값만 정상적으로 들어오고 C_Set()에서 받는건 이상한값이 들어있습니다.
규칙을 보아하니 팅커로 호출해서 받은 값은 팅커로 호출되는 함수에만 넘겨야 정상적으로 들어가고요
반대로 순수루아함수로 호출해서 받은값은 순수루아에서 받을때만 정상적으로 받아집니다.
이런경우는 어떻게 해결해야 하는지요. 두방식을 섞어쓰면 안되는건지요?