- 1 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 09:11:41 ]
- LuaやSquirrelなどアプリケーションへの組み込み用途で
使われるプログラミング言語についてのスレッドです まとめwiki(なにか質問する前に必ずみること!) wikiwiki.jp/lua/ その他の参考URLは>2から ■前スレ 【Lua】組み込み系言語総合【Squirrel】 pc12.2ch.net/test/read.cgi/tech/1205208141/ ■過去スレ その3 pc11.2ch.net/test/read.cgi/tech/1160799232/ その2 pc8.2ch.net/test/read.cgi/tech/1063711237/ その1 pc5.2ch.net/tech/kako/1034/10341/1034182349.html
- 743 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 17:13:43 ]
- 同時に動かす必要が無いなら良くないんじゃない
- 744 名前:デフォルトの名無しさん [2009/12/21(月) 19:21:29 ]
- 良くないですね
- 745 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 21:23:01 ]
- >>740
まずは2.18.0のShiftJIS対応版だ…
- 746 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:10:03 ]
- sjis対応なんて激変してない限りいつも同じ手順だろうに
- 747 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 00:38:06 ]
- AngelScriptはこまめに更新されるから、結構手間なのよ。
- 748 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:10:33 ]
- ShiftJIS<->UTF-8の変換を間に挟むだけなんだから、
一度書いたら別に毎度手間がかかる訳じゃないだろ。
- 749 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 07:53:25 ]
- //
/ / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ Lua!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
- 750 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 09:25:42 ]
- >>748
AS_DOUBLEBYTE_CHARSETで有効になる部分に、そのままだとビルドエラーになる部分があって、 そこを毎回毎回直さなきゃならないんだ。 公式に知らせたほうがいいとは思うが英語が苦手でね…
- 751 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:12:37 ]
- とりあえずdiff 取って投げれないの?
- 752 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:37:03 ]
- >>735
こういうの、JavaScriptとかRubyとかやってると思いつくよなw
- 753 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 10:38:18 ]
- 毎回なおすってまさか手でなおしてるんじゃ・・・
バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと
- 754 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 11:34:26 ]
- >>751
自分がいじったファイルをリポジトリにコミットって事? >>753 まさかの毎回手直し。 あと、 >バージョン管理してパッチ吐いたりして、どうしてもパッチあたらないときは手で直すとかしたらどうかと ってのは、TortoiseSVNの「パッチを作成」「パッチを適用」を使えって事? 質問ばかりですまん。
- 755 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:01:22 ]
- >>754
公式は svn かな。それなら 1. 公式から任意のバージョンをエクスポートしてきて、それで自分の手元で自前の svnレポジトリを作る 2. 自分の更新はそこに任意にコミットする 3. 公式の svn から適当なタイミング(リリースがあった時とか)で更新を「マージ」する これでおおむね安全に手元作業できるはず svn は以前は外部レポジトリからのマージができなかったので、 手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする 必要があったんだけど、今のは普通に外のレポジトリからマージできるのでこの手の作業は楽になった あるいは最先端技術でいくなら、bazaar のような、svn プロトコルに対応した分散構成管理ツールをつかうという手もある。 svn のマージはわりとややこしいし、ログの類もマージ作業に依存してしまうので、こっちのが構造的にははるかにスマート。 この場合、自分の変更分はローカルコミットとして維持する形になる
- 756 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:26:40 ]
- >>755
詳しい説明d。 ただ、AngelScriptはWIPのみsvnを公開してるみたいなので、 >手元のレポジトリに「ベンダーブランチ」として公式の内容をまるごとコピーして、さらにそこからマージする というやり方になりそう。 ちょっと試してくる。
- 757 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 12:38:19 ]
- >>756
WIPってなにかと思ったら work in progress か。 まあ、そりゃ svn ってのはそういうものだから^^; えーと、任意のリリースバージョンならタグうたれてるみたいだから ttps://angelscript.svn.sourceforge.net/svnroot/angelscript/tags/ からとれるかと。 バージョン間でのマージ処理したければ、ここのツリーの差分をひろってくればいい
- 758 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 16:40:58 ]
- そもそも
英語が苦手とか駄々こねてんじゃねえよクソが 死ねばいいのに
- 759 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:24:49 ]
- ごめん誤爆してた
- 760 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:30:59 ]
- >>759
ということにしたいんですね
- 761 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:34:46 ]
- メインラインにマージしてもらえば今後そのケースで悩む必要は無いというのに
英語が出来ないからというそれだけの理由で一生無駄な作業をしつづけるんだろうな 英語が出来ずともパッチ送るだけで十分なのに
- 762 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 17:39:17 ]
- そういうのはそう思う人がやればよろし。おしつけはおーぷんそーすの精神に反するのでいくない
- 763 名前:762 mailto:sage [2009/12/22(火) 17:39:53 ]
- ごめん誤爆した
- 764 名前:762 mailto:sage [2009/12/22(火) 19:33:50 ]
- >>763
人を騙るな。まじ気にしなくていいよ>パッチ送るとか
- 765 名前:762 mailto:sage [2009/12/22(火) 19:38:59 ]
- お前こそ誰だよ
- 766 名前:762 mailto:sage [2009/12/22(火) 20:51:42 ]
- 何で俺こんなにいるん?
- 767 名前:762 mailto:sage [2009/12/22(火) 23:13:59 ]
- >>762の人気に嫉妬
- 768 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:16:08 ]
- 4800円もするpython入門書が古い版でしかもC組み込みについて全然触れてなかったでござる
- 769 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:33:42 ]
- 何も文章書かずにパッチだけいきなり送るとか、どんだけ失礼なんだよ。
- 770 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:41:15 ]
- お歳暮だって何も文章書かずにいきなり送りつけてくるだろ。
- 771 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 02:58:59 ]
- 最近お歳暮という日本の習慣を覚えたばかりの外国人の方ですか?
- 772 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:42:11 ]
- つまりパッチにoseiboって書いて送れと
- 773 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 07:56:22 ]
- おう、てめーらサンタさんディスってんのか
- 774 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:52:13 ]
- サンタさんはいい子にしかこないけど、
いい子以外にもパッチを送りつけるような真似はいかがなものかと。
- 775 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:55:19 ]
- ASが悪い子だと
- 776 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:46:07 ]
- >>769
gitなんかdiff形式のメール生成して送る機能なかったけ?w
- 777 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 21:48:17 ]
- まーでも、こういうときってgithubとかbitbucketみたいなサービス使って欲しくはある。
forkして変更して、変更を相手に送る(pullリクエストする)というのがシステムに組み込まれているから、 パッチ送るのも気軽なんだよね。
- 778 名前:デフォルトの名無しさん [2010/01/04(月) 14:49:54 ]
- コムラッドのタカネ終わってるな
namidame.2ch.net/test/read.cgi/venture/1260791115/l50 set.bbspink.com/test/read.cgi/sm/1246009466/l50 set.bbspink.com/test/read.cgi/sm/1249183350/l50
- 779 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 15:51:39 ]
- オイ俺のコピペ脳、まで読んだ。
- 780 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 09:15:42 ]
- Lua について相談なんですが、
メタテーブルの __newindex を使えば、 テーブルに新しい key を追加するときにフックをかけることができるけど、 同じような感じで、テーブルの既存の key の値を変更するときに、 フックをかけることってできないかな?
- 781 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 10:36:17 ]
- メタテーブルの__indexは調べた?
- 782 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:26:52 ]
- __index は調べたんですが、
キーがすでにテーブルにある場合は __index はなにもしないですよね。 Metatable の index の擬似コードから抜粋: local v = rawget(table, key) if v ~= nil then return v end ← キーが存在するならその値を返す。 www.lua.org/manual/5.1/manual.html#2.8
- 783 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 11:52:07 ]
- 単純に、テーブル本体は何も仕事をしないでメタテーブルにすべて丸投げしたい
と考えれば簡単なことなんだけどな。 空のテーブルにメタテーブルを持たせて key が何も無い状態を維持すれば良い。 いったんメタテーブルに丸投げするが、データを保持する仕事はテーブル本体でやる と考えるとややこしくなるよな。
- 784 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:20:51 ]
- 確かに! 間に空テーブルをかませばいいんですよね。
ありがとうございました。
- 785 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 00:41:10 ]
- Lua 5.2.0 work1 出てるね
ファイナルもうすぐかも
- 786 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:50:02 ]
- > ファイナルもうすぐかも
それはない
- 787 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 01:12:00 ]
- 環境周りが結構変わったのかな?
- lexical environmentsの導入(in EXP do BLOCK end) - setfenv/getfenvがなくなった(debugのはある?) - 全thread(コルーチン)で環境はひとつのみ? 自作ライブラリは結構見直さないとなー
- 788 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 03:37:11 ]
- こうですか?わかりません
local x = 1 do local y = 2 do ・・・ end end in {x = 1} do in {x = x, y = 2} do ・・・ end end
- 789 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 10:13:28 ]
- lexical environment は、ECMAScript (JavaScript) の with みたいなもんかな。
set/getfenv は関数に対して破壊的な操作をしてしまうので、新しいやり方のほうがきれいに書けるかも。
- 790 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 11:19:29 ]
- 空テーブルをsetfenvするモジュールシステムに慣れてる人なら、
もともと空っぽの環境を破壊されてもほとんど困らないけどね
- 791 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 21:19:47 ]
- 破壊的なのは「グローバルな関数の環境を変えてしまう」って
とこじゃないの?setfenvする場合たいてローカル関数 をつくったうえで行う場合がほとんどだし。 function global_f() ~~~ end に対してglobal_fの挙動を変えたいがために(たとえば global_f内で呼び出しているprintの挙動を変える) setfenv(global_f,~~)とはやるのは危険だし。 (ほかスレッドでの呼び出しも影響を受ける) in { print=function(...) ~~ end } do global_f() end とできるからそのほうが安全・・・ってのが 使いどころなのかな?
- 792 名前:791 mailto:sage [2010/01/13(水) 00:53:12 ]
- ごめん激しくうそ言った。
791の例でprintはglobal_fが作られた時点で固定化されているので 一番最後の方法では挿げ替えはできないね(orz
- 793 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 01:02:20 ]
- Tropico3という箱庭(miniスケープの方の)ゲームでlua使われてた。
なんかzlib圧縮(?)されてるから.luaファイルみてもわからんけど
- 794 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 09:45:12 ]
- >>792
それであってるんじゃないかな? print が global_f の外側で local で宣言されていれば global_f が作られた時点で固定化される(レキシカル変数として)けど、 そうでなければグローバル変数として参照されるので、 環境を変えればその影響を受ける。
- 795 名前:791 mailto:sage [2010/01/13(水) 19:13:03 ]
- 実際にビルドして試したので「間違い」で正しいかと。
本質的にはスレッドに対するsetfenvと同じで >94の勘違いと同質な問題。 子供の関数の呼び出しまで影響を受けるとなると 危険極まりないのも事実だし。(トレードオフではあるが) それよりもpcalやCスタック先からyield可能になったのは大きい。
- 796 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 07:28:39 ]
- あ、ごめんなさい。勘違いしてた。
関数が定義された場所の環境をそのまま引き継ぐってことですよね。 だから、スクリプトファイルを読み込むとき(dofile とかで)に in ... do を使うと、 以後、そのファイル内で定義された関数はサンドボックス環境で実行されるわけか。
- 797 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:43:54 ]
- Luaって
table = { element1 = 3 element3 = "str" func element2() ...... end } みたいなことできませんか?
- 798 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 18:52:44 ]
- 事故解決しました。。。。ごめんなさい
- 799 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 06:58:28 ]
- Lua 5.2 work2キタ━━
ファイナルもうすぐかも
- 800 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:28:47 ]
- URLください
- 801 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:27:15 ]
- lua5.1.dllがノートンでウィルス扱いされるな
- 802 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 11:46:33 ]
- なにそれこわい
- 803 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 18:24:53 ]
- そういやShiftJIS対応Lua5.1.3もノートンでウィルスありと判定されてたな。
誤検出なのかな?
- 804 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:46:56 ]
- 皆luaスクリプトの暗号化はどうやってるん?
リファレンスマニュアル探したけど、それらしい物が無かったんだが…
- 805 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:53:24 ]
- Luaってシリアライズできなかったっけ
- 806 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 01:12:18 ]
- lua_load/lua_dumpで自前で暗号化するくらしかできんよね
- 807 名前:デフォルトの名無しさん [2010/02/03(水) 08:55:04 ]
- 暗号化したファイルを読み込んで復元し、文字列にする>luaL_loadbufferやluaL_loadstringにその文字列を渡してコンパイル
って手順ではダメ?
- 808 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:27:02 ]
- Python人気ねーな。luaより断然コード書きやすいのに。遅いけど
- 809 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:43:27 ]
- >>808
>>4
- 810 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:46:04 ]
- Luaがもうちょっとキモくない文法ならいいんだけどなぁ
- 811 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 12:49:10 ]
- 文法だけ変換するプリプロセッサかトランスレータのようなものを作ればいいんじゃないだろうか
- 812 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 13:02:55 ]
- たった数十kbくらいのサイズで
Cライクな文法が使える超軽量な組み込みないかな LuaとかPawnも、小さい部類だろうけど不要な物が多すぎる
- 813 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 18:35:51 ]
- asじゃあかんの
- 814 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:16:11 ]
- Win版でUTF8とUTF16を相互変換するようにLuaを改造したけど需要ないかしら
たとえばSDLとか ところで、Windows x64向けにビルドしてみたけど > print(2^63 - (2^63+1)) でなぜか0が返ってくる > print(2^31 - (2^31+1)) なら1になるけど ちなみにlua_Integerの実体ptrdiff_tは8バイトになってる どこがおかしいのかわからん
- 815 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:57:11 ]
- 整数も浮動小数点で計算するからだそうだ‥‥
64bit integerに対して64bit doubleじゃ精度足りないっての パッチがあったからつっこんでみるが、ちゃんと動くか心配だ
- 816 名前:804 mailto:sage [2010/02/03(水) 21:57:40 ]
- >>805->>807
アドバイスありがとう。 luaL_loadbufferやluaL_loadstringを使うという発想は思いつきませんでした。
- 817 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:53:15 ]
- >>811
Euphoria, t3x, moto, JavaなどCトランスレータを実装している言語は探すと色々あるものの、 トランスレート後に吐いたCソースとハンドコードしたCソースとのリンク方法が 文章化されてなかったりするするんだよな。 >>812 小さくはないが...elastiCは? ttp://www.elasticworld.org/
- 818 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:12:28 ]
- Luaスクリプトってバインダなしで使い物になるレベル?
- 819 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 19:41:20 ]
- 何らかのバインダ及びグルーが無いと、スクリプトの意味が無い気が。
- 820 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:35:40 ]
- mingw ,gcc を前提としてるバインダが多い様な気がして
lua手を出しにくいのです。。。
- 821 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:52:42 ]
- lua51.libとlua5.1.libって何が違うんだろう
- 822 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:53:06 ]
- それは気のせいないし思い込みでは……
- 823 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 21:57:42 ]
- .so を makefile でつくる、という事例にちょくちょく
遭遇しまうまう・・・orz
- 824 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:02:22 ]
- バインダはLuaではなくバインダという言語である!!
- 825 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 22:04:46 ]
- $(CC) を $(CL) とか代えて、pkg-config はそのままでも
nmake -f makefile でビルドできるもんなんだろうか・・・
- 826 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:11:51 ]
- pkg-configはシェルスクリプトだからmsysなりcygwinなり要るだろ
- 827 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:39:23 ]
- nmakeには、一から書き直して食わしてる
必要なobjぐらいなら写せるだろ
- 828 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 00:52:13 ]
- それ全然lua関係ないじゃん
必要なc/cppファイルひろって Makefile 書き直すなり Visual Studio でプロジェクトファイルつくるなりぐらいやりなされ。 そんな難しいもんじゃない。
- 829 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 11:59:44 ]
- >>828
こういう問題を回避するためにSquirrelのソースパッケージをCMake対応にして フォーラムに投げてみたら、いらないって言われた……。
- 830 名前:デフォルトの名無しさん mailto:sage [2010/02/05(金) 18:05:55 ]
- オレはCMakeで固まろうとした
- 831 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:14:44 ]
- luaのuserdataとlightuserdataの違いって
userdata ・lua側でアロケート ・lua側でデアロケート(GC) ・Cには参照のみが渡される ・Cからは寿命が分からない lightuaserdata ・C側でアロケート ・C側でデアロケート ・luaには参照のみが渡される ・luaからは寿命が分からない これ以外になんか有りますか? それとluaとCでuserdata、lightuserdataの寿命を同期させる方法は有りますか?
- 832 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 12:41:41 ]
- meta tableの有無も違ってたかも
- 833 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:15:34 ]
- >>831
これは心の贅肉をそのまま箇条書きにしたみたいで面白いな 考え方としてはとりあえず lightuserdataは無くても整数値で代用できる、と割り切ってしまうほうが簡単 そうすると、整数とuserdataを比較するのは無意味だとわかる
- 834 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:32:49 ]
- |Д゚)<バインダが面倒な人向けにいいもの置いておきますね
|Д゚)つ[AngelScript] |ミ サッ [AngelScript]
- 835 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 21:47:45 ]
- //
/ / パカッ //⌒)∩__∩ /.| .| ノ ヽ / | | ● ● | / | 彡 ( _●_) ミ AngelScript!! / | ヽ |∪| /_ // │ ヽノ \/ " ̄ ̄ ̄ ̄ ̄ ̄ ̄(..ノ
- 836 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 23:25:21 ]
- >>832,833
レスどうもです メタテーブルの有無は重要ですね いろいろいじってようやくユーザークラスをLuaに公開できるところまでこぎつけました しかしlightuserdataは使い道がわからず・・・
- 837 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 10:50:27 ]
- lightuserdataはCからのポインタの入れ物として使うのが想定されているらしい。
- 838 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 14:36:10 ]
- lightuserdataは、スクリプトで操作したいクラスのインスタンスとか放り込むんじゃないの?
ゲームとかだとひとつのスクリプトで複数のオブジェクトを制御する必要があるし。
- 839 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 15:41:29 ]
- C++のオブジェクトとLuaのオブジェクトが混在するのか・・・
C++/CLIならもっとすごいことになるな
- 840 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 17:14:33 ]
- C++のオブジェクトをスクリプトで操作する感じかな。
例えばスクリプトで SetSpeed(1,20) とかいうような関数があった場合、C++側でlightuserdataを取り出し、 //lightuserdataからObjectのポインタを取り出す Object *lpObject=(Object*)GetLightUserData(L); //Objectを操作する lpObject->SetSpeed(x,y); って感じの処理をするグルー関数を用意する。
- 841 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:22:00 ]
- lightuserdataでC++/Luaのインスタンスを協調させてみようかと頑張ってるんだができないorz
userdataでやれば上手くいくんだけどlightuserdataのほうが軽いらしいし・・・ C++側で tableを作る tableにインスタンスへのポインタをlightuserdataで格納 tableに各種メソッドを格納(メソッドはself(第一引数)tableからインスタンスへのポインタを取り出してクラスのメソッドをコールする) さらにtableを積んで__gcフィールドにデリータを格納 最初のテーブルにメタテーブルとして設定 最初のテーブルを返す という感じでやってるんだけどLua側で__gcが呼ばれてくれない mt = getmetatable、mt.__gc(hoge)とすればちゃんとデリータを呼んでくれるのに・・・ こっちがDLL codepad.org/5CuryxGE こっちがLua codepad.org/BON62sBh
- 842 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:44:41 ]
- userdataとlightuserdataは全く別物。用途が違う。
パソコンでできることがケータイではできないと嘆いているようなもんだぞ?
- 843 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 19:23:56 ]
- >>841
そういうことができなくなってる分軽いわけなんだが……
|

|