锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲一区二区在线看,欧美精品麻豆,欧美激情精品久久久久久久变态http://www.shnenglu.com/kevinlynx/category/7886.html浣庤皟鍋氭妧鏈痏_ C/C++\MMORPG鏈嶅姟鍣╘妯″潡鏋舵瀯__ TODO錛歭inux env/read more books __Kevin Lynxzh-cnTue, 07 Aug 2012 11:12:20 GMTTue, 07 Aug 2012 11:12:20 GMT60璁﹚xListCtrl鏀寔瀛恑tem緙栬緫http://www.shnenglu.com/kevinlynx/archive/2012/08/07/186581.htmlKevin LynxKevin LynxTue, 07 Aug 2012 09:09:00 GMThttp://www.shnenglu.com/kevinlynx/archive/2012/08/07/186581.htmlhttp://www.shnenglu.com/kevinlynx/comments/186581.htmlhttp://www.shnenglu.com/kevinlynx/archive/2012/08/07/186581.html#Feedback0http://www.shnenglu.com/kevinlynx/comments/commentRss/186581.htmlhttp://www.shnenglu.com/kevinlynx/services/trackbacks/186581.html

鎴戜嬌鐢ㄧ殑wxLua鐗堟湰淇℃伅涓?code>wxLua 2.8.7.0 built with wxWidgets 2.8.8錛屼篃灝辨槸LuaForWindows_v5.1.4-40.exe榪欎釜瀹夎鍖呴噷鑷甫鐨剋xLua銆傛垜涓嶇煡閬撳叾浠杦xWidgets鐗堟湰閲寃xListCtrl鎬庢牱錛屼絾鎴戜嬌鐢ㄧ殑鐗堟湰閲寃xListCtrl鏄笉鏀寔緙栬緫閲岄潰鐨勫瓙item鐨勩傚湪鎴戜嬌鐢ㄧ殑report妯″紡涓嬶紝瀛恑tem涔熷氨鏄壒瀹氭煇涓琛屼竴鍒楃殑item銆?/p>

google浜嗕竴涓嬶紝鍙戠幇鎮插墽鍦伴渶瑕佽嚜宸卞疄鐜幫紝涓昏灝辨槸鑷繁鏄劇ず涓涓獁xTextCtrl錛?/p>

--
-- file: wxListCtrlTextEdit.lua
-- author: Kevin Lynx
-- date: 08.06.2012
--
local EditList = {}

-- get the column by an abs point
function EditList:getColumn(x)
    local cols = self.listctrl:GetColumnCount()
    local cx = 0
    for i = 0, cols - 1 do
        local w = self.listctrl:GetColumnWidth(i)
        if x <= cx + w then return i end
        cx = cx + w
    end
    return -1
end

-- when a mouse down, show a text edit control 
function EditList:onLeftDown(evt)
    if self.editor:IsShown() then
        self:closeEditor()
    end
    local p = evt:GetPoint()
    local row = evt:GetIndex()
    local col = self:getColumn(p.x)
    local rect = wx.wxListCtrlEx.GetSubItemRect(self.listctrl, row, col)
    rect:SetHeight(rect:GetHeight() + 5) -- adjust
    self.editor:SetSize(rect)
    self.editor:Show()
    self.editor:SetValue(wx.wxListCtrlEx.GetItemText(self.listctrl, row, col))
    self.editor:SetFocus()
    self.col = col
    self.row = row
end

function EditList:closeEditor()
    if not self.editor:IsShown() then return end
    self.editor:Hide()
    self.listctrl:SetItem(self.row, self.col, self.editor:GetValue())
end

function EditList:initialize()
    self.editor = wx.wxTextCtrl(self.listctrl, wx.wxID_ANY, "", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxTE_PROCESS_ENTER + wx.wxTE_RICH2)
    self.editor:Connect(wx.wxEVT_COMMAND_TEXT_ENTER, function () self:closeEditor() end)
    -- not work actually
    self.editor:Connect(wx.wxEVT_COMMAND_KILL_FOCUS, function () self:closeEditor() end)
    self.editor:Hide()
end

function wx.wxListCtrlTextEdit(listctrl)
    local o = {
        listctrl = listctrl,
        editor = nil,
    }
    local editlist = newObject(o, EditList)
    editlist:initialize()
    listctrl:Connect(wx.wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, function (evt) editlist:onLeftDown(evt) end)
    listctrl:Connect(wx.wxEVT_COMMAND_LIST_ITEM_FOCUSED, function () editlist:closeEditor() end)
    return listctrl
end

鍏跺師鐞嗗氨鏄幏鍙栧埌褰撳墠榧犳爣鐐瑰嚮鎵鍦ㄧ殑瀛恑tem浣嶇疆錛岀劧鍚庡湪姝や綅緗樉紺轟竴涓獁xEditCtrl鍗沖彲銆備互涓婁唬鐮侀渶瑕佷緷璧栨垜涔嬪墠鍐欑殑Lua閲屽疄鐜扮畝鍗曠殑綾?瀵硅薄涓殑浠g爜錛屽悓鏃朵緷璧栦互涓嬮拡瀵箇xListCtrl鐨勬墿灞曟帴鍙o細

--
-- file: wxListCtrlExtend.lua
-- author: Kevin Lynx
-- date: 08.07.2012
-- brief: extend some util functions to wx.wxListCtrl
-- 
wx.wxListCtrlEx = {}

function wx.wxListCtrlEx.GetSubItemRect(listctrl, item, col)
    local rect = wx.wxRect()
    listctrl:GetItemRect(item, rect)
    local x = 0
    local w = 0
    for i = 0, col do
        w = listctrl:GetColumnWidth(i)
        x = x + w
    end
    return wx.wxRect(x - w, rect:GetY(), w, rect:GetHeight())
end

function wx.wxListCtrlEx.GetItemText(listctrl, item, col)
    local info = wx.wxListItem()
    info:SetId(item)
    info:SetColumn(col)
    info:SetMask(wx.wxLIST_MASK_TEXT)
    listctrl:GetItem(info)
    return info:GetText()
end

鍦ㄦ垜鐪嬪埌鐨剋xWidgets瀹樻柟鏂囨。閲岋紝鍏跺疄wxListCtrl宸茬粡鏈?code>GetSubItemRect鎺ュ彛錛屽茍涓斿湪鍙︿竴浜涚ず渚嬩唬鐮侀噷錛屼篃鐪嬪埌浜?code>GetItemText鎺ュ彛錛屼絾鏄紝鎴戜嬌鐢ㄧ殑鐗堟湰閲屾病鏈夛紝鎵浠ュ彧濂借嚜宸卞啓銆傚熀浜庝互涓婏紝瑕佷嬌鐢ㄨ繖涓彲浠ユ敮鎸佺紪杈戝瓙item鐨剋xListCtrl錛屽彲浠ワ細

list = wx.wxListCtrlTextEdit(wx.wxListCtrl(dialog, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxLC_REPORT))

涔熷氨鏄氳繃wx.wxListCtrlTextEdit榪欎釜鍑芥暟鍋氫笅澶勭悊錛岃繖涓嚱鏁拌繑鍥炵殑鏄湰韜殑wxListCtrl銆傚綋鐒舵洿濂界殑鏂瑰紡鏄嬌鐢ㄧ戶鎵夸箣綾葷殑鏂瑰紡錛屽紑鍙戜竴縐嶆柊鐨勬帶浠訛紝浣嗗湪Lua涓紝閽堝usedata綾誨瀷鐨勬墿灞曡矊浼煎彧鑳借繖鏍蜂簡銆?/p>

鏈濂藉悙妲戒笅錛岃繖涓帶浠舵墿灞曞叾瀹炲緢鎭跺績銆傛湰鏉ユ垜鎵撶畻褰撶紪杈戞帶浠跺け鍘葷劍鐐瑰悗灝遍殣钘忓畠錛屼絾鏄線緙栬緫鎺т歡涓婃敞鍐孠ILL_FOCUS浜嬩歡濮嬬粓涓嶈搗浣滅敤錛涙垜鍙堟墦綆楀紕涓狤SC閿洏浜嬩歡鍘繪墜鍔ㄥ彇娑堬紝浣嗘樉鐒秝xTextCtrl鏄笉鏀寔閿洏浜嬩歡鐨勩傚ソ鍚э紝鍑戝悎鐢ㄤ簡銆?/p>



Kevin Lynx 2012-08-07 17:09 鍙戣〃璇勮
]]>
tolua鐨則olua_toxxx緋誨垪API璁捐http://www.shnenglu.com/kevinlynx/archive/2012/05/10/174460.htmlKevin LynxKevin LynxThu, 10 May 2012 07:38:00 GMThttp://www.shnenglu.com/kevinlynx/archive/2012/05/10/174460.htmlhttp://www.shnenglu.com/kevinlynx/comments/174460.htmlhttp://www.shnenglu.com/kevinlynx/archive/2012/05/10/174460.html#Feedback0http://www.shnenglu.com/kevinlynx/comments/commentRss/174460.htmlhttp://www.shnenglu.com/kevinlynx/services/trackbacks/174460.html鍘熸枃閾炬帴錛?a >http://codemacro.com/2012/05/10/tolua-api/

鎴戜滑浣跨敤tolua++鎵嬪伐緇戝畾c/c++鎺ュ彛鍒發ua涓紝鍦ㄧ粦瀹氱殑鎺ュ彛瀹炵幇閲岋紝灝遍渶瑕佸彇鍑轟紶鍏ョ殑鍙傛暟銆倀olua++涓彁渚涗簡涓緋誨垪tolua_toxxx鍑芥暟錛屼緥濡傦細

lua_Number tolua_tonumber(lua_State *L, int narg, lua_Number def)
const char *tolua_tostring(lua_State *L, int narg, const char *def)

榪欎簺鍑芥暟閮芥湁涓涓猟ef鍙傛暟銆備箥涓鐪嬶紝榪欎簺鍑芥暟浣跨敤璧鋒潵寰堢畝鍗曘備紶鍏ua_State錛屼紶鍏ュ弬鏁板湪鏍堜腑鐨勪綅緗紝鐒跺悗鍐嶄紶涓涓?strong>澶辮觸鍚庤繑鍥炵殑榛樿鍊箋?/p>

鎴戦噸鐐硅璇寸殑鏄繖閲岃繖涓?strong>澶辮觸錛屾寜姝e父紼嬪簭鍛樼殑鐞嗚В錛岄拡瀵筶ua鑰岃█錛屼粈涔堟儏鍐典笅綆楀け璐ュ憿錛焞ua璇█閲屽嚱鏁板弬鏁版敮鎸佷笉浼狅紝姝ゆ椂瀹炲弬涓簄il錛屽皢nil杞崲涓轟竴涓猚綾誨瀷蹇呯劧澶辮觸錛涘弬鏁扮被鍨嬩笉姝g‘綆椾笉綆楀け璐ワ紵浣犱紶涓涓猽ser data錛宑閲屾寜鏁板瓧鏉ュ彇錛岃繖涔熺畻澶辮觸銆?/p>

榪欎箞綆鍗曠殑API榪橀渶瑕佸綰犵粨浠涔堝憿錛熺劧鍚庢垜浠旦嫻╄崱鑽″湴鍐欎簡涓婄櫨涓帴鍙o紝浠涔坱olua_tostring/tolua_tonumber鐨勪嬌鐢ㄥ皯璇翠篃鏈?00浜嗗惂錛?/p>

鐒跺悗鏈変竴澶╋紝鏈嶅姟鍣ㄥ畷鏈轟簡錛岀┖鎸囬拡:

/* 澶辮觸榪斿洖""錛岃繕鑳界渷絀烘寚閽堢殑鍒ゆ柇 */
const char *name = tolua_tostring(L, 1, "");
if (name[0] == '\0') { /* 絀轟覆鎬誨緱鍒ゆ柇鍚?*/
 ...
}

璺熻釜鍚庡彂鐜幫紝鑴氭湰閲屼紶鍏ョ殑鏄痭il錛岃繖閲岀殑name鍙栧嚭鏉ユ槸NULL錛岃屼笉鏄?#8221;“錛堢殑鍦板潃錛夈傜劧鍚庡悙妲戒簡涓涓嬭繖涓狝PI錛岃緵鑻﹀湴淇敼浜嗘墍鏈夌被浼間唬鐮侊紝澧炲姞瀵圭┖鎸囬拡鐨勫垽鏂傛垜娌℃湁澶氭兂銆?/p>

鏁呬簨緇х畫錛屾湁涓澶╂湇鍔″櫒铏界劧娌″畷鏈猴紝浣嗗姛鑳戒笉姝e父浜?

float angle = (float) tolua_tonumber(L, 1, 2 * PI);
...

榪欎釜鎰忔濇槸錛岃繖涓嚱鏁扮殑鍙傛暟1榛樿鏄?*PI錛屼粈涔堟槸榛樿錛焞ua閲屾煇鍑芥暟鍙傛暟涓嶄紶錛屾垨浼爊il灝辨槸浣跨敤榛樿銆傚洜涓轟笉浼犵殑璇濓紝榪欎釜瀹炲弬鏈韓灝辨槸nil銆備絾錛宼olua_tonumber鐨勮涓轟笉鏄繖鏍風殑錛屽畠鐨勫疄鐜扮湡鏄伔鎳?

TOLUA_API lua_Number tolua_tonumber (lua_State* L, int narg, lua_Number def)
{
 return lua_gettop(L)<abs(narg) ? def : lua_tonumber(L,narg);
}
TOLUA_API const char* tolua_tostring (lua_State* L, int narg, const char* def)
{
 return lua_gettop(L)<abs(narg) ? def : lua_tostring(L,narg);
}

鎰忔濇槸錛屽彧鏈夊綋浣犱笉浼犵殑鏃跺欙紝瀹冩墠榪斿洖榛樿鍊鹼紝鍚﹀垯灝變氦緇檒ua鐨凙PI鏉ョ錛岃宭ua榪欎簺API鏄笉鏀寔搴旂敤灞傜殑榛樿鍙傛暟鐨勶紝瀵逛簬lua_tonumber閿欒鏃跺氨榪斿洖0錛宭ua_tostring閿欒鏃跺氨榪斿洖NULL銆?/p>

榪欑鍏惰涓哄拰鍏跺甫鏉ョ殑common sense涓嶄竴鑷寸殑API璁捐錛屽疄鍦ㄨ浜鴻泲鐤箋備粈涔堟槸common sense鍛紵灝卞儚涓涓猆I搴撻噷鐨勬寜閽紝鎴戜滑閮界煡閬撴湁click浜嬩歡錛宧over浜嬩歡錛孶I搴撶殑鏂囨。鐢氳嚦閮戒笉闇瑕佽В閲婁粈涔堟槸click浠涔堟槸hover錛屽洜涓哄ぇ瀹剁湅鍒拌繖涓笢瑗匡紝灝辨湁浜嗗叡璇嗭紝鏃犻渶搴熻瘽錛岃繖灝辨槸common sense銆傚氨鍍弔olua鐨勮繖浜汚PI錛岄潪甯告櫘閫氾紝澶у涓鐪嬮兘鏈熷緟鍦ㄦ剰澶栨儏鍐典笅浣犺兘榪斿洖def鍊箋備絾瀹冪珶鐒朵笉鏄傚疄鍦ㄤ笉琛岋紝浣犲彲浠ユā浠縧ua鐨刢heck緋誨垪鍑芥暟鐨勫疄鐜板槢:

LUALIB_API lua_Number luaL_checknumber (lua_State *L, int narg) {
 lua_Number d = lua_tonumber(L, narg);
 if (d == 0 && !lua_isnumber(L, narg)) /* avoid extra test when d is not 0 */
 tag_error(L, narg, LUA_TNUMBER);
 return d;
}

鍗籌紝鏍規湰涓嶇敤鍘繪鏌ユ爤闂錛岀洿鎺ュ湪lua_tonumber涔嬪悗鍐嶅仛鍖呰媯鏌ャ備綍鍐碉紝lua闇瑕佷綘鍘繪鏌ユ爤鍚楋紵褰撲綘璁塊棶浜嗘爤澶栫殑鍏冪礌鏃訛紝lua浼氳嚜鍔ㄨ繑鍥炰竴涓叏灞甯擱噺luaO_nilobject:

static TValue *index2adr(lua_State *L, int idx) {
 ...
 if (o >= L->top) return cast(TValue*, luaO_nilobject);
}

鍙︼紝紼嬪簭鎮插墽涔熸潵婧愪簬鑷嗘兂銆?/p>

Kevin Lynx 2012-05-10 15:38 鍙戣〃璇勮
]]>
浼犻扡ua鍑芥暟鍒癈/C++涓?/title><link>http://www.shnenglu.com/kevinlynx/archive/2011/04/24/144905.html</link><dc:creator>Kevin Lynx</dc:creator><author>Kevin Lynx</author><pubDate>Sun, 24 Apr 2011 09:28:00 GMT</pubDate><guid>http://www.shnenglu.com/kevinlynx/archive/2011/04/24/144905.html</guid><wfw:comment>http://www.shnenglu.com/kevinlynx/comments/144905.html</wfw:comment><comments>http://www.shnenglu.com/kevinlynx/archive/2011/04/24/144905.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/kevinlynx/comments/commentRss/144905.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/kevinlynx/services/trackbacks/144905.html</trackback:ping><description><![CDATA[<div class="hvzpftn" id="luac-c" class="document"><h1 class="title">传递Lua函数到C/C++中</h1><div class="hvzpftn" id="id1" class="section"><h1>问题</h1><p>在Lua中,因为函数也是第一类值,所以会出现将函数作为另一个函数的参数,或者函数作 为函数的返回值。这种机制在很多地方都能代码更灵活更简洁,例如:</p><pre class="literal-block"> table.sort(table [,comp]) </pre><p>这里的comp就要求传入一个函数,我们在调用时,大概会有如下形式:</p><pre class="literal-block"> table.sort(t, comp) -- 直接写函数名 table.sort(t, local_comp) -- 某个局部函数 table.sort(t, function (a, b) xxx end ) -- 临时构造一个匿名函数 </pre><p>其中最后一种方式最为灵活,任意时候在需要的时候构造一个匿名函数。这种在Lua自身的 环境中使用,自然没有问题。但是,当我们在C/C++中注册一些函数到Lua环境中,而这些 函数也需要使用函数参数的时候,问题就出来了。</p><p>Lua本身是不支持将Lua函数作为函数参数传入C/C++的,不管这个想要传入的函数是全局的 、局部的、或者匿名的(匿名的本质上也算局部的)。一般情况下,我们唯一的交互方式, 不是传入一个函数,而是一个全局函数名。C/C++保存这个函数名,在需要回调Lua的时候, 就在Lua全局表中找到这个函数(根据函数名),然后再调用之。情况大致如下:</p><pre class="literal-block"> function lua_func () xxx end cfunc(lua_func) -- wrong cfunc("lua_func") -- right </pre><p>我们这回的脚本模块,策划会大量使用需要回调函数的C/C++函数。显然,创建大量的全局 函数,先是从写代码的角度看,就是很伤神的。</p></div><div class="hvzpftn" id="id2" class="section"><h1>解决</h1><p>我们最终需要的方式,大概如下:</p><pre class="literal-block"> cfunc(lua_func) -- ok cfunc(function () xxx end) -- ok local xxx = function () xxx end cfunc(xxx) -- ok </pre><p>要解决这个问题,我的思路是直接在Lua层做一些包装。因为C/C++那边仅支持传入一个全局 函数名(当然不一定得全局的,根据实际情况,可能在其他自己构造的表里也行),也就是 一个字符串,所以我的思路就是将Lua函数和一个唯一的字符串做映射。:</p><pre class="literal-block"> function wrap (fn) local id = generate_id() local fn_s = "__callback_fn"..id _G[fn_s] = fn return fn_s end </pre><p>这个wrap函数,就是将一个函数在全局表里映射到一个字符串上,那么在使用时:</p><pre class="literal-block"> cfunc(wrap(function () xxx end)) cfunc(const char *fn_name, xxx); -- cfunc的原型 </pre><p>cfunc是C/C++方注册进Lua的函数,它的原型很中规中矩,即:只接收一个函数名,一个字 符串,如之前所说,C/C++要调用这个回调函数时,就根据这个字符串去查找对应的函数。 脚本方在调用时,如果想传入一个匿名函数了,就调用wrap函数包装一下即可。</p></div><div class="hvzpftn" id="id3" class="section"><h1>一个改进</h1><p>上面的方法有个很严重的问题,在多次调用wrap函数后,将导致全局表也随之膨胀。我们需 要想办法在C/C++完成回调后,来清除wrap建立的数据。这个工作当然可以放到C/C++来进行 ,例如每次发生回调后,就设置下全局表。但这明显是不对的,因为违背了接口的设计原则 ,这个额外的机制是在Lua里添加的,那么责任也最好由Lua来负。要解决这个问题,就可以 使用Lua的metamethods机制。这个机制可以在Lua内部发生特定事件时,让应用层得到通知。 这里,我们需要关注__call事件。</p><p>Lua中只要有__call metamethod的值,均可被当作函数调用。例如:</p><pre class="literal-block"> ab(1, 2) </pre><p>这里这个函数调用形式,Lua就会去找ab是否有__call metamethod,如果有,则调用它。这 个事实暗示我们,一个table也可以被调用。一个改进的wrap函数如下:</p><pre class="literal-block"> local function create_callback_table (fn, name) local t = {} t.callback = fn setmetatable (t, {__call = -- 关注__call function (func, ...) -- 在t(xx)时,将调用到这个函数 func.callback (...) -- 真正的回调 del_callback (name) -- 回调完毕,清除wrap建立的数据 end }) return t end function wrap (fn) local id = generate_func_id() -- 产生唯一的id local fn_s = "_callback_fn"..id _G[fn_s] = create_callback_table(fn, fn_s) -- _G[fn_s]对应的是一个表 return fn_s end </pre><p>在我们的C/C++程序中,依然如往常一样,先是从_G里取出函数名对应的对象。虽然这个对 象现在已经是一个table。然后lua_call。</p><p>上面的代码是否会在原有基础上增加不可接受的性能代价?虽然我没有做过实际测试,但是 从表明看来,排除meta table在Lua里的代价,也就多了几次Lua函数调用。</p><p>最后,感叹一下,Lua里的table及metatable机制,实在非常强大。这种强大不是功能堆砌 出来的强大,而是简单东西组合出来的强大。其背后的设计思想,着实让人佩服。</p><p><strong>4.26.2011 Update</strong></p><p>之前的文中说“Lua本身是不支持将Lua函数作为函数参数传入C/C++的“,这句话严格来说不 正确(由某网友评论)。假设函数cfun由c/c++注册,我们是可以编写如下代码的:</p><pre class="literal-block"> cfunc(print) -- 传入Lua函数 </pre><p>但是问题在于,我们无法取出这个函数并保存在c/c++方。Lua提供了一些接口用于取cfunc 的参数,例如luaL_checknumber(封装lua_tonumber)。但没有类似luaL_checkfunction的 接口。Lua中的table有同样的问题。究其原因,主要是Lua中的函数没有直接的c/c++数据结 构对应。</p><p>;; END</p></div></div><img src ="http://www.shnenglu.com/kevinlynx/aggbug/144905.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/kevinlynx/" target="_blank">Kevin Lynx</a> 2011-04-24 17:28 <a href="http://www.shnenglu.com/kevinlynx/archive/2011/04/24/144905.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>椋炵lua鐗堬細luafeiq0.1.0鍙戝竷http://www.shnenglu.com/kevinlynx/archive/2011/01/31/139646.htmlKevin LynxKevin LynxMon, 31 Jan 2011 08:51:00 GMThttp://www.shnenglu.com/kevinlynx/archive/2011/01/31/139646.htmlhttp://www.shnenglu.com/kevinlynx/comments/139646.htmlhttp://www.shnenglu.com/kevinlynx/archive/2011/01/31/139646.html#Feedback2http://www.shnenglu.com/kevinlynx/comments/commentRss/139646.htmlhttp://www.shnenglu.com/kevinlynx/services/trackbacks/139646.html緇т笂嬈℃崳榧撳嚭浜?a href="http://www.shnenglu.com/kevinlynx/archive/2011/01/23/139187.html" target="_blank">椋炵鐨勭兢鑱婂崗璁?/a>鍚?閴翠簬騫村簳娌″暐浜嬫儏鍋?灝辯敤lua鍐欎簡涓畝鍗曠殑鍗忚鍏煎鐨処M銆傛湰鏉ュ紑濮嬭

鍙︿竴涓悓浜嬪湪iptux鐨勫熀紜涓婁慨鏀圭殑錛岀粨鏋滃ぇ姒傛槸鍥犱負iptux鐨勪唬鐮佷笉鏄偅涔堝鏄撲慨鏀癸紝灝變笉浜嗕簡涔嬩簡銆傝繖涓?/font>

鍒氬彂甯冪殑luafeiq鍔熻兘闈炲父綆鍗曪紝浠呮敮鎸佷笌椋炵錛堝寘鎷ぇ閮ㄥ垎鍏煎IP messager鐨処M錛夎繘琛屽崟鑱婏紝緹?/font>娑堟伅鐨?/font>

鏀跺彂錛岀畝鏄撶殑娑堟伅鐩掑瓙錛堟殏瀛樻湭璇繪秷鎭級銆傚洜涓洪夌殑搴撻兘鏄法騫沖彴鐨勶紝鎵浠ュ緢瀹規槗鐨刲uafeiq涔熸槸璺?/font>騫沖彴鐨勶紝

鏈涓昏鐨勬槸鎴戞兂鍦╨inux涓嬩嬌鐢ㄣ?/font>

 

涔嬫墍浠ラ夌敤lua錛屼竴鏂歸潰鏄兂緇冪粌lua錛屽彟涓鏂歸潰鍒欐槸鍥犱負寮鍙戞晥鐜囥傚墠孌墊椂闂村湪android涓嬪啓浜嗕簺java浠g爜錛?/font>

鐢╦ava鍐欎唬鐮佽寰楃敋涓虹埥蹇紙褰撶劧綆椾笉浜嗗畬緹庯級銆傝繖鍑犲ぉ鍐欎簡鍗冩妸琛岀殑lua錛堜篃璁告湁3K琛岋紝鏈粺璁¤繃錛夛紝

鎰熻涔熶笉閿欍傜患鍚堟潵璇達紝榪欎簺楂樼駭璇█鐨勫緢澶氬ソ鐢ㄧ殑璇硶鐗規э紝渚嬪闂寘錛坈losure錛夛紝鍨冨溇鍥炴敹錛岄兘鎻愰珮

浜嗕笉灝戝啓浠g爜鐨勯熷害銆傚綋鐒訛紝lua浜庢垜鑰岃█涔熺畻涓嶄笂瀹岀編鐨勮璦銆備緥濡傛垜緇忓父鍥犱負鍙橀噺鏁查敊瀛楁瘝錛岃屽湪榪愯鏃?/font>

鎵嶆毚闇瞡il閿欒銆傝繖涔熻鍙互閫氳繃璇稿IDE涔嬬被鐨勫伐鍏峰湪鍐欎唬鐮佺殑鏃跺欏氨緇欎簣鎻愮ず銆俵ua 鍦ㄩ亣鍒頒竴涓鍙鋒椂錛?/font>

榛樿鍦板皢鍏跺鐞嗕負鍏ㄥ眬鐨勩傚叧浜庤繖涓娉曠壒鎬ф棭鏈変漢鎻愬嚭涓嶇埥錛屽彧鑳借澶у璁捐鐨勫噯鍒欎笉涓鏍楓傦紙鍦ㄦ垜浠?/font>

欏圭洰閲岋紝鎴戠洿鎺ユ敼鍐欎簡鍏ㄥ眬鍙橀噺鐨刴etatable錛屼粠鑰岄槻姝㈢瓥鍒掗殢鎰忓畾涔夊叏灞鍙橀噺錛?/font>

 

鍐嶆潵璋堣皥瀹炵幇榪囩▼涓殑涓浜涚悙浜嬨傚洜涓洪縐嬩篃綆楁槸IP messager鍗忚鐨勫吋瀹瑰疄鐜幫紝寰堝閫氫俊闄や簡鍙互浣跨敤

鎶撳寘杞歡鍒嗘瀽澶栵紝榪樺彲浠ョ洿鎺ラ氳繃IP messager鐨勬簮鐮佹潵浜嗚В銆傛墍浠ワ紝鍩虹閫氫俊鍗忚鐨勫疄鐜拌繃紼嬩篃姣旇緝

綆鍗曘傞縐嬩笌椋炵涔嬮棿鍙戦佺鑱婃秷鎭槸緇忚繃鍔犲瘑鐨勩傚叾鍔犲瘑榪囩▼涔熶笉綆鍗曪紝鏇撮噸瑕佺殑鏄紝鎴戝茍涓嶆兂嫻垂澶?/font>

澶氭椂闂村湪榪欎笂闈€傚悗鏉ュ彂鐜板叾瀹炲彲浠ラ氳繃涓婄嚎娑堟伅閲屾煇涓爣蹇椾綅琛ㄦ槑鑷繁涓嶉渶瑕佸姞瀵嗐傝繖涓爣蹇楀氨鏄秷鎭ご

閲岀殑option銆備笂綰垮箍鎾嚭鍘葷殑娑堟伅閲屼竴鏃﹁〃鏄庤嚜宸變笉鍔犲瘑錛岄偅涔堜互鍚庡拰椋炵閫氫俊涔熷氨涓嶉渶瑕佽В瀵嗕簡銆?/font>

 

鍙戦佺鑱婃秷鎭椂錛屾秷鎭噷浼氭惡甯︿竴涓秷鎭疘D銆傝繖涓狪D鍙互閫氳繃浠繪剰綆楁硶鐢熸垚錛屼緥濡傜洿鎺ュ彇time鐨勫箋傛帴鏀跺埌

瀵規柟鐨勬秷鎭椂錛岄渶瑕佸彇鍑鴻ID錛岀劧鍚庡姞鍏ュ洖搴旀秷鎭傚鏂規敹鍒板洖搴旀秷鎭悗錛屽氨鐭ラ亾鑷繁鍙戦佹垚鍔熴傝繖涓繃紼?/font>

綆楁槸ip messager鍦║DP涓婂仛鐨勬秷鎭彲闈犻獙璇侊紝榪囩▼涔熸瘮杈冪畝鍗曘?/font>

 

緹よ亰娑堟伅鍦ㄤ箣鍓嶆彁鍒拌繃錛屾槸閫氳繃UDP澶氭挱瀹炵幇銆傛垜浠彲浠ユ帴鏀舵墍鏈夌兢鐨勬秷鎭傚鏋滀箣鍓嶅凡緇忓浜庢煇涓兢閲岋紝

閭d箞涓鏃︿綘涓婄嚎鍚庯紙騫挎挱涓婄嚎娑堟伅錛夛紝浣犲氨鍙互鐩存帴鍦ㄨ繖涓兢閲屽彂璦銆備絾濡傛灉浣犱箣鍓嶄笉鍦ㄨ繖涓兢閲岋紝鍒?/font>

鍙互閫氳繃澶氭挱涓涓姞鍏ョ兢鐨勬秷鎭紝鐒跺悗灝卞彲浠ヤ笉璇瘋嚜鏉ュ湴鍦ㄨ繖涓兢閲屽彂璦銆傝緇嗙殑娑堟伅鍊煎拰瀹炵幇閮藉彲浠ヤ粠

luafeiq鐨勪唬鐮侀噷璇誨埌錛坢essage_sender.lua錛夈?/font>

 

鍦╨inux涓嬫帴鏀秝indows涓婄殑椋炵娑堟伅錛屾槸闇瑕佸仛瀛楃緙栫爜杞崲鐨勩傚洜涓簂uafeiq浣跨敤IUP浣滀負UI搴擄紝IUP鍦?/font>

linux涓嬩嬌鐢℅TK浣滀負搴曞眰瀹炵幇錛岄粯璁ゅ叏閮ㄦ槸UTF8緙栫爜銆俵uafeiq閲屾垜鑷繁鍐欎簡涓猯ua搴擄紝鐢ㄤ簬緙栫爜杞崲銆?/font>

 

璇濊IUP浣滀負涓涓猆I搴擄紝榪樻槸姣旇緝涓嶉敊鐨勩傛濡傚叾浠嬬粛鏂囨。閲屾墍璇達紝瀛︿範鏇茬嚎浣庯紝鍩烘湰涓婄湅涓浼氭枃妗o紝灝卞彲浠?/font>

鐩存帴浣跨敤浜嗐俵uafeiq浣跨敤鐨処UP鐗堟湰鑷沖皯闇瑕?.0浠ヤ笂銆傚綋鍒濆湪linux涓嬩負浜嗗畨瑁匢UP3.3錛屽熀鏈姳浜?涓皬鏃?/font>

鏃墮棿錛屽悇縐嶅鎬殑娌″澶ф剰涔夌殑閿欒淇℃伅銆傚悗鏉ユ崲鎴?.2鐗堟湰錛屽眳鐒朵竴涓嬪瓙灝卞拰璋愪簡錛屾棤闄愭ㄥ康銆?/font>

 

luafeiq鐩墠鏀懼湪googlecode鐨勭増鏈紝鍙互璇存槸涓涓緢涓嶈礋璐d換鐨勭増鏈傛棭涓婃垜鎵嶅垰鎶婂瓧絎︾紪鐮佽漿鎹㈢殑浠g爜

璋冭瘯濂姐備粖澶╁凡緇忚鍋囷紝瀹墮噷灝變竴鍙扮數鑴戯紝涔熷氨嫻嬭瘯涓嶄簡榪欎釜瀛楃緙栫爜杞崲鏄惁鐪熺殑鑳芥甯稿伐浣溿傛垜鍦?/font>

windows涓媎ump浜嗕簺瀛楃錛岀湅涓婂幓鑳芥甯稿姛鑳姐傛槑澶╁緱鍥炶佸榪囨槬鑺傦紝涓婁笉浜嗙綉錛岀儲鎬у氨鎻愬墠鍙戝竷浜嗐?/font>

 

luafeiq欏圭洰鍦板潃錛?a title="http://code.google.com/p/luafeiq/" >http://code.google.com/p/luafeiq/



]]>
淇敼tolua++浠g爜鏀寔鎻掑叆棰勭紪璇戝ご鏂囦歡http://www.shnenglu.com/kevinlynx/archive/2010/02/28/108632.htmlKevin LynxKevin LynxSun, 28 Feb 2010 12:58:00 GMThttp://www.shnenglu.com/kevinlynx/archive/2010/02/28/108632.htmlhttp://www.shnenglu.com/kevinlynx/comments/108632.htmlhttp://www.shnenglu.com/kevinlynx/archive/2010/02/28/108632.html#Feedback0http://www.shnenglu.com/kevinlynx/comments/commentRss/108632.htmlhttp://www.shnenglu.com/kevinlynx/services/trackbacks/108632.htmltolua++鑷姩鐢熸垚緇戝畾浠g爜鏃訛紝涓嶆敮鎸佹彃鍏ラ緙栬瘧澶存枃浠躲傝櫧鐒跺彲浠ユ彃鍏ョ洿鎺ョ殑C++浠g爜渚嬪
錛屽$#include xxxx錛屼絾鎻掑叆浣嶇疆騫舵病鏈変綅浜庢枃浠跺ご銆傚浜庝嬌鐢ㄩ緙栬瘧澶寸殑澶у瀷宸ョ▼鑰岃█錛?br>灝ゅ叾鏄煇涓粦瀹氫唬鐮佷緷璧栦簡宸ョ▼閲屽叾浠栧緢澶氫笢瑗匡紝鏇翠竾鎭剁殑鏄緙栬瘧澶存枃浠墮噷灞呯劧鍖呭惈寰堝
鑷繁鍐欑殑浠g爜鏃訛紝鏀寔鎻掑叆棰勭紪璇戝ご鏂囦歡榪欎釜鍔熻兘寰堥噸瑕併?

璇寸櫧浜嗭紝涔熷氨鏄璁﹖olua++鍦ㄧ敓鎴愮殑浠g爜鏂囦歡寮澶存彃鍏?include "stdafx.h"銆?

淇敼浠g爜鍏跺疄寰堢畝鍗曘倀olua++鍒嗘瀽pkg鏂囦歡鍙婄敓鎴愪唬鐮佹枃浠跺叾瀹為兘鏄氳繃lua浠g爜瀹屾垚鐨勩?br>鍦╯rc/bin/lua鐩綍涓嬶紝鎴栬呭湪婧愪唬鐮侀噷toluabind.c閲岋紙鎶婂搴旂殑lua浠g爜鐩存帴浠SCII鐮佸?br>澶嶅埗浜嗚繃鏉ワ級鍗充負榪欎簺浠g爜銆?

棣栧厛淇敼package.lua閲岀殑classPackage::preamble鍑芥暟錛屽彲浠ョ湅鍑鴻鍑芥暟浼氱敓鎴愪竴浜涗唬鐮?br>鏂囦歡澶達紝妯′豢鐫鍗沖彲鍐欎笅濡備笅浠g爜錛?

if flags['I'] then
   output( '#include "..flags['I'] )
end

浠庝笂涓嬫枃浠g爜鍙互鐪嬪嚭flags鏄釜鍏ㄥ眬鍙橀噺錛屼繚瀛樹簡鍛戒護琛屽弬鏁般?

鐒跺悗淇敼tolua.c浠g爜鏂囦歡錛岃鍏跺線lua鐜閲屼紶鍏ュ懡浠よ鍙傛暟錛?

case 'I':setfield(L,t,"I",argv[++i];break;

鏈潵錛岃繖鏍蜂慨鏀瑰悗鍩烘湰灝卞彲浠ヨtolua++鏀寔閫氳繃鍛戒護琛屾寚瀹氭槸鍚︽彃鍏ラ緙栬瘧澶達細
tolua++ -o test.cpp -H test.h -I stdafx.h test.pkg

涓嶈繃浜嬫儏騫墮潪寰堥『鍒╋紝閫氳繃寮鍚疶OLUA_SCRIPT_RUN瀹忔潵璁﹖olua++閫氳繃src/bin/lua涓嬬殑lua
浠g爜鏉ュ畬鎴愬姛鑳斤紝緇撴灉鍚庢潵鍙戠幇basic.lua浼間箮鏈夐棶棰樸傛棤濂堜箣涓嬶紝鍙ソ鐢╳inhex涔嬬被鐨勫伐
鍏鋒妸淇敼榪囩殑package.lua杞崲涓簎nsigned char B[]緗簬toluabind.c閲岋紝鍗沖彲姝e父澶勭悊銆?



]]>
lua_yield涓轟粈涔堝氨蹇呴』鍦╮eturn琛ㄨ揪寮忎腑琚皟鐢?/title><link>http://www.shnenglu.com/kevinlynx/archive/2010/01/17/105883.html</link><dc:creator>Kevin Lynx</dc:creator><author>Kevin Lynx</author><pubDate>Sun, 17 Jan 2010 11:32:00 GMT</pubDate><guid>http://www.shnenglu.com/kevinlynx/archive/2010/01/17/105883.html</guid><wfw:comment>http://www.shnenglu.com/kevinlynx/comments/105883.html</wfw:comment><comments>http://www.shnenglu.com/kevinlynx/archive/2010/01/17/105883.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/kevinlynx/comments/commentRss/105883.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/kevinlynx/services/trackbacks/105883.html</trackback:ping><description><![CDATA[<p><font size="2"></font>  <p><font size="2">寰堟棭鍓嶅湪鎶樿吘鎸傝搗LUA鑴氭湰鏀寔鏃訛紝鎺ヨЕ鍒發ua_yield榪欎釜鍑芥暟銆俵ua manual涓粰鐨勮В閲婃槸錛?</font> <p><font size="2">This function should only be called as the return expression of a C function銆?</font> <p><font size="2">鑰岃繖涓嚱鏁頒竴鑸槸鍦ㄤ竴涓敞鍐屽埌LUA鐜涓殑C鍑芥暟閲岃璋冪敤銆俵ua_CFunction瑕佹眰鐨勫師鍨嬮噷<br>錛屽嚱鏁扮殑榪斿洖鍊煎繀欏昏繑鍥炶榪斿洖鍒癓UA鑴氭湰涓殑鍊肩殑涓暟銆備篃灝辨槸璇達紝鍦ㄤ竴涓笉闇瑕佹寕璧風殑<br>lua_CFunction瀹炵幇閲岋紝涔熷氨鏄竴涓笉闇瑕乺eturn lua_yield(...鐨勫疄鐜伴噷錛屾垜搴旇return<br>涓涓繑鍥炲間釜鏁般?</font> <p><font size="2">浣嗘槸涓轟粈涔堣皟鐢╨ua_yield灝卞繀欏繪斁鍦╮eturn琛ㄨ揪寮忛噷錛熷綋鏃跺緢澶╃湡錛屾病鍘繪繁絀訛紝鍙嶆鍙戠幇<br>涓嶆寜鐓ua manual閲岃鐨勫仛灝辨槸涓嶈銆傝屼笖鍏抽敭鏄紝lua manual灝變笉鍛婅瘔浣犱負浠涔堛?</font> <p><font size="2">鏈榪戠獊鐒跺氨鎯沖埌榪欎釜闂錛屽喅瀹氬幓鎼炴竻妤氳繖涓棶棰樸備警鎹瘋浜嗭紝婧愮爜闈㈠墠浜嗘棤縐樺瘑銆傛垜鐢氳嚦<br>鍦ㄧ湅浠g爜涔嬪墠錛岃繕鐞㈢(鐫LUA鏄笉鏄搷浣滀簡鍫嗘爤錛堢郴緇熷爢鏍堬級涔嬬被鐨勪笢瑗褲傜粨鏋滈殢渚胯窡浜嗕笅<br>浠g爜鐪熺殑璁╂垜寰堟睏棰溿傛湁鏃跺欎漢鐘偦浜嗙湡鐨勬槸涓涓偛鍓с傝綆鍗曠殑涓涓棶棰樹細琚漢鎼炲緱寰堢<br>縐橈細 </font> <p><font size="2">瑙i噴鎵ц璋冪敤涓涓敞鍐岃繘LUA鐨刲ua_CFunction鏄湪ldo.c閲岀殑luaD_precall鍑芥暟閲岋紝鏈夊涓?br>浠g爜錛?</font> <p><font size="2">    n = (*curr_func(L)->c.f)(L);  /* do the actual call */<br>    lua_lock(L);<br>    if (n < 0)  /* yielding? */<br>      return PCRYIELD;<br>    else {<br>      luaD_poscall(L, L->top - n);<br>      return PCRC;<br>    } </font> <p><font size="2">澶氱殑鎴戝氨涓嶈浜嗭紝鍒漢娉ㄩ噴鍐欏緱寰堟竻妤氫簡錛屾敞鍐岃繘鍘葷殑lua_CFunction濡傛灉榪斿洖鍊煎皬浜?錛岃繖<br>涓嚱鏁板氨鍚戜笂灞傝繑鍥濸CRYIELD錛屼粠鍚嶅瓧灝卞彲鐪嬪嚭鏄憡璇変笂灞傞渶瑕乊IELD銆傚啀鎵懼埌lua_yield鍑?br>鏁扮殑瀹炵幇錛屾伆濂借鍑芥暟灝辮繑鍥?1銆?</font> <p><font size="2">瑕佸啀寰涓婂眰璺燂紝浼氬埌lvm.c閲宭uaV_execute鍑芥暟錛岀湅璧鋒潵搴旇灝辨槸铏氭嫙鏈哄湪瑙i噴鎵ц鎸囦護錛?</font> <p><font size="2">      case OP_CALL: {<br>        int b = GETARG_B(i);<br>        int nresults = GETARG_C(i) - 1;<br>        if (b != 0) L->top = ra+b;  /* else previous instruction set top */<br>        L->savedpc = pc;<br>        switch (luaD_precall(L, ra, nresults)) {<br>          case PCRLUA: {<br>            nexeccalls++;<br>            goto reentry;  /* restart luaV_execute over new Lua function */<br>          }<br>          case PCRC: {<br>            /* it was a C function (`precall' called it); adjust results */<br>            if (nresults >= 0) L->top = L->ci->top;<br>            base = L->base;<br>            continue; </font> <p><font size="2">瀵逛簬PCRYIELD榪斿洖鍊鹼紝鐩存帴蹇界暐澶勭悊浜嗐?</font></p><img src ="http://www.shnenglu.com/kevinlynx/aggbug/105883.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/kevinlynx/" target="_blank">Kevin Lynx</a> 2010-01-17 19:32 <a href="http://www.shnenglu.com/kevinlynx/archive/2010/01/17/105883.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀹炵幇鑷繁鐨凩UA緇戝畾鍣?涓涓ā鏉跨紪紼嬫寫鎴?/title><link>http://www.shnenglu.com/kevinlynx/archive/2008/08/13/58684.html</link><dc:creator>Kevin Lynx</dc:creator><author>Kevin Lynx</author><pubDate>Wed, 13 Aug 2008 01:33:00 GMT</pubDate><guid>http://www.shnenglu.com/kevinlynx/archive/2008/08/13/58684.html</guid><wfw:comment>http://www.shnenglu.com/kevinlynx/comments/58684.html</wfw:comment><comments>http://www.shnenglu.com/kevinlynx/archive/2008/08/13/58684.html#Feedback</comments><slash:comments>12</slash:comments><wfw:commentRss>http://www.shnenglu.com/kevinlynx/comments/commentRss/58684.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/kevinlynx/services/trackbacks/58684.html</trackback:ping><description><![CDATA[     鎽樿: 瀹炵幇LUA緇戝畾鍣? author : Kevin Lynx Preface     褰揕UA鑴氭湰璋冪敤鎴戜滑娉ㄥ唽鐨凜鍑芥暟鏃訛紝鎴戜滑闇瑕侀愪釜鍦頒粠LUA鏍堥噷鍙栧嚭璋冪敤鍙傛暟錛屽綋鍑芥暟榪斿洖鏃訛紝鍙堥渶瑕佷竴涓竴涓湴寰LUA鏍堝帇鍏ヨ繑鍥炲鹼紝騫朵笖鎴戜滑娉ㄥ唽鐨勫嚱鏁板彧鑳芥槸int()(lua_State*)綾誨瀷銆傝繖寰堜笉鏂逛究錛屽浜庝笂灞傜▼搴忓憳鏉ヨ鏇翠笉鏂逛究銆?nbsp;   鍥犳鎴戜滑瑕佸仛鐨?..  <a href='http://www.shnenglu.com/kevinlynx/archive/2008/08/13/58684.html'>闃呰鍏ㄦ枃</a><img src ="http://www.shnenglu.com/kevinlynx/aggbug/58684.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/kevinlynx/" target="_blank">Kevin Lynx</a> 2008-08-13 09:33 <a href="http://www.shnenglu.com/kevinlynx/archive/2008/08/13/58684.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>瀹炵幇LUA鑴氭湰鍚屾澶勭悊浜嬩歡:LUA鐨刢oroutinehttp://www.shnenglu.com/kevinlynx/archive/2008/08/12/58636.htmlKevin LynxKevin LynxTue, 12 Aug 2008 08:02:00 GMThttp://www.shnenglu.com/kevinlynx/archive/2008/08/12/58636.htmlhttp://www.shnenglu.com/kevinlynx/comments/58636.htmlhttp://www.shnenglu.com/kevinlynx/archive/2008/08/12/58636.html#Feedback12http://www.shnenglu.com/kevinlynx/comments/commentRss/58636.htmlhttp://www.shnenglu.com/kevinlynx/services/trackbacks/58636.htmlauthor : Kevin Lynx

闇姹?/strong>

    鍙梂OW鐨勫獎鍝嶏紝LUA瓚婃潵瓚婂鍦拌搴旂敤浜庢父鎴忎腑銆傝剼鏈鐢ㄤ簬娓告垙涓富瑕佺敤浜庣瓥鍒掔紪鍐欐父鎴忚鍒欑浉鍏熾傚疄闄呰繍鐢ㄤ腑錛?br>鎴戜滑浼氬皢寰堝瀹夸富璇█鍑芥暟緇戝畾鍒癓UA鑴氭湰涓紝浣胯剼鏈彲浠ユ洿澶氬湴鎺у埗紼嬪簭榪愯銆備緥濡傛垜浠彲浠ョ粦瀹歂PCDialog涔嬬被鐨勫嚱鏁?br>鍒癓UA涓紝鐒跺悗絳栧垝渚垮彲浠ュ湪鑴氭湰閲屾帶鍒舵父鎴忎腑寮瑰嚭鐨凬PC瀵硅瘽妗嗐?br>    鎴戜滑鐜板湪闈復榪欐牱鐨勯渶姹傦細瀵逛簬瀹夸富紼嬪簭鑰岃█錛屾煇浜涘姛鑳芥槸涓嶈兘闃誨紼嬪簭閫昏緫鐨勶紙瀵逛簬娓告垙紼嬪簭灝ゅ叾濡傛錛夛紝浣嗘槸涓?br>浜嗘柟渚跨瓥鍒掞紝鎴戜滑鍙堥渶瑕佽鑴氭湰鐪嬭搗鏉ヨ闃誨浜嗐傜敤NPCDialog涓句釜渚嬪瓙錛屽湪鑴氭湰涓湁濡備笅浠g爜 錛?br>

    ret = NPCDialog( "Hello bitch" )
   
if ret == OK then print("OK") end


    瀵逛簬絳栧垝鑰岃█錛孨PCDialog搴旇鏄樆濉炵殑錛岄櫎闈炵帺瀹舵搷浣滄瀵硅瘽妗嗭紝鐐瑰嚮OK鎴栬呭叧闂紝涓嶇劧璇ュ嚱鏁頒笉浼氳繑鍥炪傝屽浜?br>瀹夸富紼嬪簭C++鑰岃█錛屾垜浠浣曞疄鐜拌繖涓嚱鏁板憿錛?

 

    static int do_npc_dialog( lua_State *L )
   
{
       
const char *content = lua_tostring( L, -1 );
       
        lua_pushnumber( ret );
       
return 1;
    }


    鏄劇劧錛岃鍑芥暟涓嶈兘闃誨錛屽惁鍒欏畠浼氶樆濉炴暣涓父鎴忕嚎紼嬶紝榪欏浜庢湇鍔″櫒鑰岃█鏄笉鍙鐨勩備絾鏄鏋滆鍑芥暟绔嬪嵆榪斿洖錛岄偅
涔堝畠騫舵病鏈夋敹闆嗗埌鐜╁瀵逛簬閭d釜瀵硅瘽妗嗙殑鎿嶄綔銆?br>    緇間笂錛屾垜浠鍋氱殑鏄紝璁╄剼鏈劅瑙夋煇涓搷浣滈樆濉烇紝浣嗕簨瀹炰笂瀹夸富紼嬪簭騫舵病鏈夐樆濉炪?

浜嬩歡鏈哄埗

    涓涓渶綆鍗曠殑瀹炵幇錛堝浜嶤紼嬪簭鍛樿岃█涔熻涔熸槸浼樼編鐨勶級錛屽氨鏄嬌鐢ㄤ簨浠舵満鍒躲傛垜浠皢瀵硅瘽妗嗙殑鎿嶄綔緇撴灉浣滀負涓涓簨浠躲?br>鑴氭湰閲屼簨瀹炰笂娌℃湁鍝釜鍑芥暟鏄樆濉炵殑銆備負浜嗗鐞嗕竴浜?#8220;闃誨”鍑芥暟鐨勫鐞嗙粨鏋滐紝鑴氭湰鍚戝涓葷▼搴忔敞鍐屼簨浠跺鐞嗗櫒錛堝悓GUI浜嬩歡
澶勭悊鍏跺疄鏄竴鏍風殑錛夛紝渚嬪鑴氭湰鍙互榪欐牱錛?br>

    function onEvent( ret )
       
if ret == OK then print("OK") end
    end
   
-- register event handler
    SetEventHandler(
"onEvent" )
    NPCDialog(
"Hello bitch")


    瀹夸富紼嬪簭淇濆瓨浜嬩歡澶勭悊鍣╫nEvent鍑芥暟鍚嶏紝褰撶帺瀹舵搷浣滀簡瀵硅瘽妗嗗悗錛屽涓葷▼搴忓洖璋冭剼鏈腑鐨刼nEvent錛屽畬鎴愭搷浣溿?br>    浜嬪疄涓婃垜鐩鎬俊鏈夊緢澶氫漢紜疄鏄繖涔堝仛鐨勩傝繖鏍峰仛鍏跺疄灝辨槸鎶婁竴涓『搴忔墽琛岀殑浠g爜嫻侊紝鍒嗘垚浜嗗緢澶氬潡銆備絾鏄浜巗leep
榪欐牱鐨勮剼鏈皟鐢ㄥ憿錛熶緥濡傦細

 

    --do job A
    sleep(
10)
   
--do job B
    sleep(
10)
   
--do job C
   


    閭d箞閲囩敤浜嬩歡鏈哄埗灝嗗彲鑳戒細鎶婁唬鐮佸垎瑙d負錛?br>

    function onJobA
       
--do job A
        SetEventHandlerB(
"onJobB")
        sleep(
10)
    end
    function onJobB
       
--do job B
        SetEventHandlerC(
"onJobC")
    end
    function onJobC
       
--do job C
    end
   
-- script starts here
    SetEventHandlerA(
"onJobA" )
    sleep(
10)


    浠g爜鐪嬭搗鏉ヤ技涔庢湁鐐歸毦鐪嬩簡錛屾渶閲嶈鐨勬槸瀹冧笉鏄撶紪鍐欙紝絳栧垝浼拌浼氭姄鐙傜殑銆傛垜鎯籌紝瀵逛簬闈炰笓涓氱▼搴忓憳鑰岃█錛岀▼搴忕殑
欏哄簭鎵ц鍙兘鐞嗚В璧鋒潵鏇翠負瀹規槗銆?

SOLVE IT

    鎴戜滑鐨勮В鍐蟲柟妗堬紝鍏跺疄鍙湁涓鍙ヨ瘽錛氬綋鑴氭湰鎵ц鍒伴樆濉炴搷浣滄椂錛堝NPCDialog錛夛紝鎸傝搗鑴氭湰錛屽綋瀹夸富紼嬪簭鏌愪釜鎿嶄綔瀹?br>鎴愭椂錛岃鑴氭湰浠庝箣鍓嶇殑鎸傝搗鐐圭戶緇墽琛屻?br>    榪欎笉鏄竴縐嶅亣鎯崇殑鍔熻兘銆傛垜鍦ㄥ垰寮濮嬪疄鐜拌繖涓姛鑳戒箣鍓嶏紝浠ヤ負LUA涓嶆敮鎸佽繖涓姛鑳姐傛垜鑷嗘兂鐫濡備笅鐨勬搷浣滐細
    鑴氭湰錛?br>    ret = NPCDialog("Hello bitch")
    if ret == 0 then print("OK") end
    瀹夸富紼嬪簭錛?br>

    static int do_npc_dialog( lua_State *L )
   
{
       
        lua_suspend_script( L );
       
    }


    鏌愪釜鍦版柟鏌愪釜鎿嶄綔瀹屾垚浜嗭細
    lua_resume_script( L );
    褰撴垜瀹炵幇浜嗚繖涓姛鑳藉悗錛屾垜鐚涚劧鍙戠幇錛屽疄闄呮儏鍐靛拰鎴戣繖閲屾兂鐨勫樊涓嶅錛堟湁鐐規睏棰滐級銆?/font>


璁よ瘑Coroutine

    coroutine鏄疞UA涓被浼肩嚎紼嬬殑涓滆タ錛屼絾鏄畠鍏跺疄鍜宖iber鏇寸浉浼箋備篃灝辨槸璇達紝瀹冩槸涓縐嶉潪鎶㈠崰寮忕殑綰跨▼錛屽畠鐨勫垏鎹㈠彇鍐?br>浜庝換鍔℃湰韜紝涔熷氨鏄彇鍐充綘錛屼綘鍐沖畾瀹冧滑浠涔堟椂鍊欏彂鐢熷垏鎹€傚緩璁綘闃呰lua manual浜嗚В鏇村銆?br>    coroutine鏀寔鐨勫吀鍨嬫搷浣滄湁錛歭ua_yield, lua_resume錛屼篃灝辨槸鎴戜滑闇瑕佺殑鎸傝搗鍜岀戶緇墽琛屻?br>    lua_State浼間箮灝辨槸涓涓猚oroutine錛屾垨鑰呮寜鐓UA鏂囨。涓殑鍙︿竴縐嶈娉曪紝灝辨槸涓涓猼hread銆傛垜榪欓噷涔嬫墍浠ョ敤’浼間箮‘鏄?br>鍥犱負鎴戣嚜宸變篃鏃犳硶紜畾錛屾垜鍙兘璇達紝lua_State鐪嬭搗鏉ュ氨鏄竴涓猚oroutine銆?br>    LUA鎻愪緵lua_newthread鐢ㄤ簬鎵嬪伐鍒涘緩涓涓猚oroutine錛岀劧鍚庡皢鏂板垱寤虹殑coroutine鏀劇疆浜庡爢鏍堥《錛屽鍚屽叾浠杗ew鍑烘潵鐨?br>瀵硅薄涓鏍楓傜綉涓婃湁甯栧瓙璇磍ua_newthread鍒涘緩鐨勪笢瑗夸笌鑴氭湰閲岃皟鐢╟oroutine.create鍒涘緩鍑烘潵鐨勪笢瑗夸笉涓鏍鳳紝浣嗘槸鏍規嵁鎴?br>鐨勮瀵熸潵鐪嬶紝浠栦滑鏄竴鏍風殑銆俵ua_newthread榪斿洖涓涓猯ua_State瀵硅薄錛屾墍浠ヤ粠榪欓噷鍙互鐪嬪嚭錛?#8220;lua_State鐪嬭搗鏉ュ氨鏄竴涓?br>coroutine”銆傚彟澶栵紝緗戜笂涔熸湁浜鴻鍒涘緩鏂扮殑coroutine浠d環寰堝ぇ錛屼絾鏄紝涓涓猯ua_State鐨勪唬浠瘋兘鏈夊澶э紵褰撶劧錛屾垜娌″仛榪?br>嫻嬭瘯錛屼笉鏁㈠璦銆?br>    lua_yield鐢ㄤ簬鎸傝搗涓涓猚oroutine錛屼笉榪囪鍑芥暟鍙兘鐢ㄤ簬coroutine鍐呴儴錛岀湅鐪嬪畠鐨勫弬鏁板氨鐭ラ亾浜嗐?br>    lua_resume鐢ㄤ簬鍚姩涓涓猚oroutine錛屽畠鍙互鐢ㄤ簬coroutine娌℃湁榪愯鏃跺惎鍔ㄤ箣錛屼篃鍙互鐢ㄤ簬coroutine鎸傝搗鏃墮噸鏂板惎鍔?br>涔嬨俵ua_resume鍦ㄤ袱縐嶆儏鍐典笅榪斿洖錛歝oroutine鎸傝搗鎴栬呮墽琛屽畬姣曪紝鍚﹀垯lua_resume涓嶈繑鍥炪?br>    lua_yield鍜宭ua_resume瀵瑰簲浜庤剼鏈嚱鏁幫細coroutine.yield鍜宑oroutine.resume錛屽緩璁綘鍐欏啓鑴氭湰紼嬪簭鎰熷彈涓媍oroutine錛?br>渚嬪錛?br>

    function main()
        print(
"main start")
        coroutine.yield()
        print(
"main end")
    end
    co
=coroutine.create( main );
    coroutine.resume(co)


REALLY SOLVE IT

    浣犲彲鑳戒細鎯沖埌錛屾垜浠負鑴氭湰瀹氫箟涓涓猰ain錛岀劧鍚庡湪瀹夸富紼嬪簭閲宭ua_newthread鍒涘緩涓涓猚oroutine錛岀劧鍚庡皢main鏀捐繘鍘伙紝
褰撹剼鏈皟鐢ㄥ涓葷▼搴忕殑鏌愪釜’闃誨‘鎿嶄綔鏃訛紝瀹夸富紼嬪簭鑾峰彇鍒頒箣鍓嶅垱寤虹殑coroutine錛岀劧鍚巠ield涔嬨傚綋鎿嶄綔瀹屾垚鏃訛紝鍐峳esume
涔嬨?br>    浜嬪疄涓婃柟娉曟槸瀵圭殑錛屼絾鏄病鏈夊繀瑕佸啀鍒涘緩涓涓猚oroutine銆傚涔嬪墠鎵璇達紝涓涓猯ua_State鐪嬩笂鍘誨氨鏄竴涓猚oroutine錛?br>鑰屾伆濂斤紝鎴戜滑濮嬬粓閮戒細鏈変竴涓猯ua_State銆傛劅瑙変笂錛岃繖涓猯ua_State灝卞儚鏄痬ain coroutine銆傦紙灝卞儚浣犵殑涓葷嚎紼嬶級
    鎬濊礬灝辨槸榪欐牱錛屽洜涓哄叿浣撳疄鐜版椂錛岃繕鏄湁浜涢棶棰橈紝鎵浠ユ垜緗楀垪姣忎釜姝ラ鐨勪唬鐮併?br>    鍒濆lua_State鏃跺浣犲鉤鏃舵墍鍋氾細

    lua_State *L = lua_open();
    luaopen_base( L );


    娉ㄥ唽鑴氭湰闇瑕佺殑瀹夸富紼嬪簭鍑芥暟鍒癓閲岋細

    lua_pushcfunction( L, sleep );
    lua_setglobal( L,
"my_sleep" );


    杞藉叆鑴氭湰鏂囦歡騫舵墽琛屾椂紼嶅井鏈夌偣涓嶅悓錛?br>

    luaL_loadfile( L, "test.lua" );
lua_resume( L,
0 ); /* 璋冪敤resume */


    鍦ㄤ綘鐨?#8217;闃誨‘鍑芥暟閲岄渶瑕佹寕璧穋oroutine錛?br>

    return lua_yield( L, 0 );


    娉ㄦ剰錛宭ua_yield鍑芥暟闈炲父鐗瑰埆錛屽畠蹇呴』浣滀負return璇彞琚皟鐢紝鍚﹀垯浼氳皟鐢ㄥけ璐ワ紝鍏蜂綋鍘熷洜鎴戜篃涓嶆竻妤氥傝屽湪榪欓噷錛?br>瀹冧綔涓簂ua_CFunction鐨勮繑鍥炲鹼紝浼氫笉浼氬紩鍙戦敊璇紵鍥犱負lua_CFunction綰﹀畾榪斿洖鍊間負璇ュ嚱鏁板浜庤剼鏈岃█鐨勮繑鍥炲間釜鏁般?br>瀹為檯鎯呭喌鏄紝鎴戠湅鍒扮殑涓浜涗緥瀛愰噷閮借繖鏍峰畨鎺抣ua_yield錛屾墍浠 do what they do銆?

    鍦ㄨ繖涓搷浣滃畬鎴愬悗錛堝鐜╁鎿嶄綔浜嗛偅涓璇濇錛夛紝瀹夸富紼嬪簭闇瑕佸敜閱抍oroutine錛?br>

    lua_resume( L, 0 );

 

    澶ц嚧姝ラ灝辮繖浜涖傚鏋滀綘瑕佸崟鐙垱寤烘柊鐨刲ua_State錛屽弽鑰屼細鎼炲緱寰堥夯鐑︼紝鎴戝紑濮嬪氨鏄偅鏍風殑鍋氱殑錛屾繪槸瀹炵幇涓嶄簡鑷繁
棰勬兂涓殑鏁堟灉銆?

鐩稿叧涓嬭澆錛?/strong>
    渚嬪瓙紼嬪簭涓紝鎴戠粰浜嗕竴涓猻leep瀹炵幇銆傝剼鏈▼搴忚皟鐢╯leep鏃跺皢琚寕璧鳳紝瀹夸富紼嬪簭涓嶆柇媯鏌ュ綋鍓嶆椂闂達紝褰撴椂闂村埌鏃訛紝resume
鎸傝搗鐨刢oroutine銆?a href="http://www.shnenglu.com/Files/kevinlynx/lua_test_coro.rar" target=_blank>涓嬭澆渚嬪瓙

 

8.13琛ュ厖

   鍙兘鏈夋椂鍊欙紝鎴戜滑鎻愪緵緇欒剼鏈殑鍑芥暟闇瑕佽繑鍥炰竴浜涘肩粰鑴氭湰錛屼緥濡侼PCDialog榪斿洖鎿嶄綔緇撴灉錛屾垜浠彧闇瑕佸湪瀹夸富紼嬪簭閲宭ua_resume

涔嬪墠push榪斿洖鍊煎嵆鍙紝褰撶劧錛岄渶瑕佽緗甽ua_resume絎簩涓弬鏁頒負榪斿洖鍊間釜鏁般?br>
2.9.2010
    lua_yield( L, nResults )絎簩涓弬鏁版寚瀹氳繑鍥炵粰lua_resume鐨勫間釜鏁般傚涓嬶細

   lua_pushnumber( L, 3 );
   
return lua_yield( L, 1 );
 ..
   
int ret = lua_resume( L, 0 );
   
if( ret == LUA_YIELD )
   
{
         lua_Number r 
= luaL_checknumber( L, -1 );
   }


]]>
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              久久黄色网页| 久久综合国产精品| 亚洲日韩中文字幕在线播放| 亚洲免费在线| 99国产精品久久久| 久久久亚洲高清| 久久精品国产久精国产思思| 欧美日韩国产美| 欧美大胆a视频| 尤物视频一区二区| 欧美伊人久久久久久午夜久久久久| 一区二区三区高清| 欧美啪啪一区| 亚洲国产精品123| 精品成人乱色一区二区| 午夜欧美电影在线观看| 午夜免费电影一区在线观看| 欧美三区不卡| 日韩一级网站| 一区二区三区四区五区在线| 欧美激情欧美激情在线五月| 亚洲大胆美女视频| 亚洲日本中文| 欧美大胆成人| 欧美激情自拍| 日韩午夜精品| 欧美视频一区二区三区| 9色国产精品| 午夜在线电影亚洲一区| 另类综合日韩欧美亚洲| 韩国女主播一区| 久久久久久9| 欧美黄免费看| 日韩一区二区免费高清| 欧美日韩精品一区二区在线播放| 亚洲精品免费网站| 国产精品免费一区二区三区观看| 美女国产一区| 一区在线免费观看| 欧美aⅴ99久久黑人专区| 亚洲经典在线看| 亚洲午夜一区二区三区| 国产欧美一区二区三区在线看蜜臀 | 国产欧美日本一区二区三区| 性色av一区二区怡红| 久久精品国产免费| 在线日韩欧美| 欧美日韩另类丝袜其他| 亚洲视频1区2区| 久久久久一区二区三区| 亚洲国产另类久久久精品极度| 美女免费视频一区| 亚洲人成人99网站| 亚洲在线一区| 亚洲国产国产亚洲一二三| 欧美日韩国产一区二区三区地区| 亚洲一区二区在线观看视频| 久久综合九色99| 一区二区高清在线| 国产日韩欧美综合在线| 欧美成人在线免费观看| 亚洲欧美国产高清| 欧美激情一区二区三区在线视频观看 | 久久久www| 亚洲久久在线| 久久午夜电影网| 亚洲视频在线观看免费| 一区在线播放| 国产精品无人区| 欧美福利电影网| 欧美在线一级视频| 一本一本大道香蕉久在线精品| 久久综合99re88久久爱| 亚洲永久字幕| 亚洲精品午夜精品| 国内成+人亚洲| 欧美日韩国产二区| 久久久精品久久久久| 在线午夜精品自拍| 亚洲国产91色在线| 久久夜色精品国产| 午夜精品免费视频| 亚洲人成在线播放| 国产一区二三区| 国产精品美女| 欧美特黄视频| 欧美精品一区二区三区在线播放 | 欧美视频日韩| 欧美电影在线播放| 亚洲视频免费在线| 亚洲精品亚洲人成人网| 欧美福利一区| 欧美jizzhd精品欧美巨大免费| 欧美亚洲专区| 亚洲欧美视频一区二区三区| 一区二区三区四区五区精品| 亚洲电影av| 1000精品久久久久久久久 | 国产精品久久激情| 欧美日本不卡视频| 欧美国产第二页| 欧美xx69| 欧美国产亚洲精品久久久8v| 久久久人成影片一区二区三区观看 | 中文在线资源观看视频网站免费不卡| 亚洲福利视频网| 亚洲成人在线视频播放 | 亚洲毛片在线观看| 亚洲片区在线| 亚洲三级国产| 亚洲国产一区二区三区在线播| 国产欧美一区二区精品忘忧草| 国产精品久久久久久五月尺| 国产精品久久二区二区| 国产精品久久毛片a| 国产精品午夜在线| 国产伦理一区| 精品成人在线| 亚洲人成高清| 亚洲最新中文字幕| 亚洲夜晚福利在线观看| 亚洲综合欧美| 欧美在线视频一区二区三区| 久久久久久色| 欧美激情第1页| 亚洲精品在线电影| 亚洲一区二区三区影院| 午夜精品久久久久99热蜜桃导演| 欧美在线视频a| 蜜桃视频一区| 欧美特黄一区| 国内精品视频在线观看| 亚洲国产色一区| 亚洲影院免费| 久久综合九色欧美综合狠狠| 欧美激情一区二区三区四区| 亚洲清纯自拍| 亚洲一区一卡| 快播亚洲色图| 欧美日韩精品免费看| 国产精品免费一区二区三区在线观看 | 欧美 日韩 国产精品免费观看| 欧美激情偷拍| 亚洲免费伊人电影在线观看av| 久久天天躁狠狠躁夜夜爽蜜月| 欧美日韩黄色一区二区| 国产视频观看一区| 日韩一区二区精品在线观看| 久久不见久久见免费视频1| 欧美超级免费视 在线| 亚洲六月丁香色婷婷综合久久| 亚洲女人天堂av| 欧美电影在线免费观看网站| 国产欧美一区二区精品仙草咪| 亚洲人成在线播放| 久久激五月天综合精品| 亚洲福利电影| 欧美一区二区在线看| 欧美日韩国产成人高清视频| 激情欧美亚洲| 欧美在线网站| 99re这里只有精品6| 久久免费黄色| 国产亚洲精品aa| 亚洲午夜久久久| 亚洲国产一区二区a毛片| 欧美一区二视频| 欧美手机在线| 一区二区国产在线观看| 美女网站久久| 午夜亚洲福利| 国产伦精品一区二区| 亚洲视频一区二区| 亚洲国产精品久久久久秋霞影院 | 午夜精品久久久| 欧美亚州在线观看| 99在线热播精品免费99热| 女生裸体视频一区二区三区| 久久aⅴ国产紧身牛仔裤| 国产精品亚洲精品| 亚洲网站视频| 91久久精品日日躁夜夜躁欧美| 久久久亚洲成人| 黑人巨大精品欧美一区二区小视频| 中文av一区二区| 亚洲日本在线观看| 欧美成人一区二免费视频软件| 在线不卡免费欧美| 久久免费午夜影院| 性8sex亚洲区入口| 国产视频欧美| 久久精品一区二区三区中文字幕| 亚洲欧美日韩在线观看a三区| 国产精品乱人伦中文| 亚洲午夜av| 亚洲一区二区不卡免费| 国产精品免费电影| 午夜国产精品视频| 小嫩嫩精品导航| 极品尤物久久久av免费看|