Request/419

http://sakura.qp.land.to/?Request%2F419


Top > Request > 419

Lua Script

  • ページ: Request
  • 投稿者: anonymous
  • 優先順位: 低
  • 状態: 却下
  • カテゴリー:
  • 投稿日: 2013-03-23 (土) 10:24:12
  • バージョン:

メッセージ

Luaマクロを実行できるようにする。LuaからC++を呼び出す。 サクラエディタの全提供関数を登録するときに同一ハンドラを登録し、ハンドラで振り分けることができる。

func(){
 lua_State* L = lua_newstate();
 luaL_openlibs(L);
 //全提供関数を登録する
 lua_register(L, "S_XXXX", &Handler);
 ...
 int top = lua_gettop(L);
 if(lua_dostring(L, "SCRIPT CODE") != 0){
   printf("%s\n", lua_tostring(L, -1));
   lua_pop(L, 1);
 }
 lua_settop(L, top);
 lua_close(L);
}

int Handler(lua_State *L){
 lua_Debug ar;
 lua_getstack(L, 0, &ar);
 lua_getinfo(L, "nsl", &ar);
 if(ar.name == NULL){
   lua_pushstring(L, "error");
   lua_error(L);
   return 0;
 }
 //関数名から処理を振り分ける
 ...
 return xxx;
}

現在DLLプラグインへ情報は渡っていないため何もできない。 以下のような感じでDLLプラグインからの"Editor"呼び出しを実現する。

  • CEditIfObjをparamsにセットする。
  • 構造体をDLLプラグインに渡す。
    struct DLL_PLUGIN_INFO_OBJ{
      DWORD m_dwVersion; //将来の構造体拡張識別用
      void* m_lpPluginObj; //params
      void* m_lpEditView; //EditView
      CALLBACK_F m_lpHandleFunction; //HandleFunction APIアドレス
      CALLBACK_C m_lpHandleCommand; //HandleCommand APIアドレス
    }
  • エディタ側はHandleFunction/Command呼び出し口を用意する。
  • DLLプラグインはHandleFunction/Commandを呼び出す。このときDLL_PLUGIN_INFO_OBJを第一引数にセットする。第二引数以降は通常のHandleFunctionと同じ。HandleFunction/Commandは第一引数を解析してエディタ内のHandleFunction/Commandを呼び出す。
  • なお、マクロスクリプトエンジン登録は別のI/F(CXXXMacroMgr::declare相当)を用意する必要がある。

  • マクロスクリプトエンジンをプラグインとして実装する方法はありませんか。 -- 2013-03-23 (土) 10:40:12
  • LuaScriptを使用すればWSH経由で利用可能です。 http://na-s.jp/LuaScript/ -- 2013-03-24 (日) 18:24:37

URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White
[添付ファイル一覧] [全ページの添付ファイル一覧]
アップロード可能最大ファイルサイズは 2,048KB です。

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2013-03-24 (日) 18:24:48 (4043d)