4

C 関数を呼び出す Lua スクリプトがあります。現在、この関数は何も返しません。この関数を変更して文字列を返すようにしたいので、CI のこの関数の最後で文字列をスタックにプッシュします。呼び出し元の Lua スクリプト内で、プッシュされた文字列値を取得する必要があります。

C の初期化と Lua への登録

void cliInitLua( void )
{
   void* ud = NULL;
   Task task;

   // Create a new Lua state
   L = lua_newstate(&luaAlloc, ud);

   /* load various Lua libraries */
   luaL_openlibs(L);

   /*Register the function to be called from LUA script to execute commands*/
   lua_register(L,"CliCmd",cli_handle_lua_commands);

   //lua_close(L);
   return;
}

これは、文字列を返すための私の c 関数です。

static int cli_handle_lua_commands(lua_State *L){
   ...
   ...
   char* str = ....; /*Char pointer to some string*/
   lua_pushstring(L, str);
   retun 1;
}

これは私のLuaスクリプトです

cliCmd("Anything here doesn't matter");
# I want to retreive the string str pushed in the c function.
4

1 に答える 1

5

Cでは、次のようなものがあります

 static int foo (lua_State *L) {
   int n = lua_gettop(L);
   //n is the number of arguments, use if needed

  lua_pushstring(L, str); //str is the const char* that points to your string
  return 1; //we are returning one value, the string
}

ルアで

lua_string = foo()

これは、関数をすでに lua_register に登録していることを前提としています

この種のタスクに関するその他の例については、優れたドキュメントを参照してください。

于 2013-11-05T18:01:48.920 に答える