簡體   English   中英

如何使用tolua ++將lua字符串(二進制)傳遞給c ++

[英]How to pass lua string(binary) to c++ using tolua++

我有一個像這樣的課程:

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,指針為空。

那么,如何將二進制字符串從lua傳遞給c ++?

也許您應該停止使用Tolua的不良API,而使用普通Lua的實際良好的 API。 std :: string和Lua字符串都能夠存儲嵌入的空字符。 tolua_tocppstring導致截斷的唯一原因是因為函數名是謊言。 它不會將其轉換為C ++字符串。 它將其轉換為C字符串 const char*

正確的答案是使用適當的API函數

std::string fromLuaStack(lua_State *lua, int stackIx)
{
  size_t len;
  const char *str = lua_tolstring(lua, stackIx, &len);
  return std::string(str, len);
}

同樣,您可以使用lua_pushlstringstd::string壓入堆棧。

不幸的是,Tolua沒有更好的文檔,因為可能有直接執行所有操作的功能。 如果有,我找不到。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM