私は次のようなクラスを持っています:</ p>
class SomeClass
{
void initFromBuffer(void* buffer,int length);
void initFromString(const std::string& str);
}
tolua ++を使用して、次のようなバインディングを取得しました。
static int SomeClass_initFromBuffer00(lua_State* tolua_S)
{
SomeClass* self = (SomeClass*) tolua_tousertype(tolua_S,1,0);
void* buffer = ((void*) tolua_touserdata(tolua_S,2,0));
int length = ((int) tolua_tonumber(tolua_S,3,0));
self->initFromBuffer(buffer,length);
}
と:
static int SomeClass_initFromString00(lua_State* tolua_S)
{
SomeClass* self = (SomeClass*) tolua_tousertype(tolua_S,1,0);
const std::string str = ((const std::string) tolua_tocppstring(tolua_S,2,0));
self->initFromString(str);
tolua_pushcppstring(tolua_S,(const char*)str);
}
ここで、バイナリデータをluaからc ++に渡したいのですが、バイナリには「\ 0」が含まれているため、initFromStringを使用して渡すと、バイナリデータがトリミングされます。しかし、initFromBufferを使用して渡すと、 `void * buffer =((void *)tolua_touserdata(tolua_S、2,0));で不正なptrが発生し、ポインターはnullになります。
では、どうすればluaからc ++にバイナリ文字列を渡すことができますか?