ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>在线观看av网站永久,国产乱码精品一区二三赶尸艳谈 ,精品久久久亚洲http://www.aygfsteel.com/ivanwan/category/50762.html自由的力量,自由的生‹z…R€?/description>zh-cnWed, 08 Feb 2012 21:12:16 GMTWed, 08 Feb 2012 21:12:16 GMT60luacom打开中文路径的Wordæ–‡äšg http://www.aygfsteel.com/ivanwan/archive/2012/02/09/369635.htmlivaneeoivaneeoWed, 08 Feb 2012 17:48:00 GMThttp://www.aygfsteel.com/ivanwan/archive/2012/02/09/369635.htmlhttp://www.aygfsteel.com/ivanwan/comments/369635.htmlhttp://www.aygfsteel.com/ivanwan/archive/2012/02/09/369635.html#Feedback0http://www.aygfsteel.com/ivanwan/comments/commentRss/369635.htmlhttp://www.aygfsteel.com/ivanwan/services/trackbacks/369635.html

背景

        luacom是一个非常强大的模块åQŒå®ƒä½¿æˆ‘们可以应用各¿Ucom¾l„äšgåQŒæ¯”如WordåQŒä½†æ˜¯ï¼Œæœ‰ä¸€ä¸ªé—®é¢˜ï¼Œä¸­æ–‡æ–‡äšgåå®ƒä¸è¯†åˆ«ã€‚äØ“ä»€ä¹ˆå‘¢åQŸå› ä¸ºcom内部æ˜?unicode的,于是luacom要求所有输入都是utf-8的,而且luacom的输å‡ÞZ¹Ÿæ˜¯utf-8的。这可肿么办啊?

iconv

        GNU有个libiconv库,要是有这个我们就不怕了åQ?luaforge上搜索下åQŒæžœç„¶æœ‰lua-iconvåQŒå®‰è£…!

        luarocks install lua-iconv  不好意思,出错啦!出错的原因有两个åQ?/p>

  • 我们没有安装libiconvåº?/li>
  • lua-iconv没有提供用cl¾~–译的方æ³?/li>

自己¾~–译lua-iconv

  1. 下蝲¾~–译好的Windows版的 libiconv
  2. 下蝲 lua-iconv 源代�/li>
  3. 解压 libiconv-1.9.1.bin.woe32.zip æ–‡äšgåQŒåƈž®†include目录æ·ÕdŠ ä¸ºvs2008çš?strong>包含文äšg目录åQŒå°†lib目录æ·ÕdŠ ä¸ºvs2008çš?strong>库文ä»?/strong>目录中(参见上一½‹‡æ–‡ç«?/a>åQ?/li>
  4. 解压lua-iconv的源代码
  5. vs2008新徏一个空的Win32 DLL工程åQ?a >参见上一½‹‡æ–‡ç«?/a>åQ‰ï¼Œå‘½åä¸ºluaiconvåQŒå°† luaiconv.c æ–‡äšgæ·ÕdŠ åˆ°å·¥½E‹ä¸­
  6. 修改源代码:int luaopen_iconv(lua_State *L)  -> __declspec(dllexport) int luaopen_luaiconv(lua_State *L)
  7. ™å¹ç›®å±žæ€?-> 链接å™?-> 输入 -> 附加库文ä»?åQ?lua51.lib iconv.lib charset.lib
  8. ¾~–译生成release版的 luaiconv.dll æ–‡äšg
  9. ž®†luaiconv.dllæ–‡äšgåQŒä»¥å?a>libiconv-1.9.1.bin.woe32.zip解压出来çš?iconv.dllåQˆçŸ¥é“我ä¸ÞZ»€ä¹ˆè¦æ”¹luaopen_iconv函数名了吧)和charset.dllæ–‡äšg一èµäh‹·è´åˆ° luaforwindowsçš„clibs目录ä¸?/li>

‹¹‹è¯•

  1. require "luacom"  
  2. require "luaiconv"  
  3.   
  4. function createIconv(to, from)  
  5.     local cd = iconv.new(to, from)  
  6.     return function(txt)  
  7.         return cd:iconv(txt)  
  8.     end  
  9. end  
  10.   
  11. L = createIconv("utf-8", "gbk")  
  12.   
  13. -- æ³¨æ„åQšè¿è¡Œæœ¬æ–‡äšg会修æ”?nbsp;C:\你好word.docx æ–‡äšgåQŒè¯·æ³¨æ„å¤‡ä†¾  
  14.   
  15. wordApp = assert(luacom.CreateObject("Word.Application"))  
  16. wordApp.Visible = true  
  17.   
  18. wordDocPath = L"C:\\你好word.docx"  
  19. if not pcall(function() wordDoc = wordApp.Documents:Open(wordDocPath) end) then  
  20.     wordDoc = wordApp.Documents:Add()  
  21. end  
  22.   
  23. wordApp.Selection:TypeText(L"你好word")  
  24. wordDoc:SaveAs2(wordDocPath, wdFormatDocument)  

以上‹¹‹è¯•代码åQŒç¬¬ä¸€‹Æ¡è¿è¡Œæ—¶ä¼šåˆ›å»?C:\你好word.docx æ–‡äšgåQŒä»¥åŽå†˜qè¡Œæ—¶ä¼šæ‰“å¼€˜q™ä¸ªæ–‡äšgåQŒæ¯‹Æ¡è¿è¡Œéƒ½ä¼šè¾“å…?“你好word” 文字。如果你是Word 2003åQŒé‚£ä¹ˆï¼Œè¯·å°†docxæ”¹äØ“doc卛_¯ã€?/p>

参考文�/h1>

http://hi.baidu.com/nivrrex/blog/item/17c231adad9e8a0f4b36d6ca.html

˜q™ä½å¤§å“¥è‡ªå·±ç”¨VC的函数写了è{换函敎ͼŒä¸è¿‡æ²¡æœ‰ž®è£…成库åQŒè€Œä¸”我觉得写得不够简‹zï¼Œç”¨iconv库比较好åQŒè¿˜ä¸å®¹æ˜“出é”?/p>

http://www.cppblog.com/darkdestiny/archive/2009/04/25/81055.html

˜q™ä½å¤§å“¥åQŒè‡ªå·Þq”¨iconv实现了è{换,也没有封装成库。我çš?#8220;L”函数也是从他˜q™å€Ÿæ¥çš„,非常感谢åQä¸˜q‡ï¼Œæˆ‘认为它˜q™ä¸ªç›¸æ¯”我这个有两个å¼Þq‚¹åQ?/p>

1、每‹Æ¡è°ƒç”¨L函数åQŒéƒ½è¦ç»˜q?iconv 打开、è{换、关闭的˜q‡ç¨‹åQŒè€Œæˆ‘对一¿UåŞ式的转换只需要打开一‹Æ¡ï¼ˆlua-iconv实现的^_^åQ?/p>

2、如果要实现反向转换åQŒå³utf-8到gbkåQŒé‚£ä¹ˆè¿˜å¾—ä¿®æ”ÒŽ¨¡å—,而我˜q™é‡Œž®×ƒ¸ç”¨äº†åQˆå½“然也是lua-iconv实现的^_^åQ?br />

libiconv的说�/div>

]]>ž®?LuaSocket 静态编译到 cocos2d-x 目标执行文äšgä¸?/title><link>http://www.aygfsteel.com/ivanwan/archive/2012/02/08/369555.html</link><dc:creator>ivaneeo</dc:creator><author>ivaneeo</author><pubDate>Tue, 07 Feb 2012 16:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/ivanwan/archive/2012/02/08/369555.html</guid><wfw:comment>http://www.aygfsteel.com/ivanwan/comments/369555.html</wfw:comment><comments>http://www.aygfsteel.com/ivanwan/archive/2012/02/08/369555.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/ivanwan/comments/commentRss/369555.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/ivanwan/services/trackbacks/369555.html</trackback:ping><description><![CDATA[<div><p>Cocos2d-x 已经提供了对 Lua 的基本支持,但除äº?Lua 的基本库外,òq¶æ²¡æœ‰æ†¾l‘一些常用库åQŒä¾‹å¦?LuaSocketã€?/p> <p>¾lè¿‡ä¸€ç•ªå°è¯•,¾lˆäºŽæžå®šäº†æ­¤é—®é¢˜ :)</p> <p>获得 LuaSocket 源代码后åQŒåœ¨ cocos2d-x ™å¹ç›®çš?libs/lua 目录中徏立子目录 exts/luasocketåQŒåƈž®? luasocket-2.0.2/src 目录中所有的 *.c/*.h æ–‡äšg拯‚´åˆ?libs/lua/exts/luasocket 目录中ã€?/p> <p>åœ?libs/lua/exts 目录中徏立文ä»Óž¼š</p> <p><strong>lualoadexts.h</strong></p> <pre>#ifndef __LUALOADEXTS_H_ #define __LUALOADEXTS_H_ #include "lauxlib.h" void luax_initpreload(lua_State *L); #endif // __LUALOADEXTS_H_ </pre> <p><strong>lualoadexts.c</strong></p> <pre>#include "lualoadexts.h" // luasocket #include "luasocket.h" #include "mime.h" static luaL_Reg luax_preload_list[] = { {"socket.core", luaopen_socket_core}, {"mime.core", luaopen_mime_core}, {NULL, NULL} }; void luax_initpreload(lua_State *L) { luaL_Reg* lib = luax_preload_list; luaL_findtable(L, LUA_GLOBALSINDEX, "package.preload", sizeof(luax_preload_list)/sizeof(luax_preload_list[0])-1); for (; lib->func; lib++) { lua_pushstring(L, lib->name); lua_pushcfunction(L, lib->func); lua_rawset(L, -3); } lua_pop(L, 1); } </pre> <p>最后,打开 <strong>libs/lua/cocos2dx_support/LuaEngineImpl.cpp </strong>æ–‡äšgåQŒåœ¨ CCLuaScriptModule::CCLuaScriptModule() 构造函数最后蝲å…?Lua 标准库和扩展库的代码åQ?/p> <pre>CCLuaScriptModule::CCLuaScriptModule() { d_ownsState = true; d_state = lua_open(); luaL_openlibs(d_state); int nOpen = tolua_Cocos2d_open(d_state); CC_UNUSED_PARAM(nOpen); nOpen = tolua_SimpleAudioEngine_open(d_state); CC_UNUSED_PARAM(nOpen); // init standard libraries luaL_openlibs(d_state); // init more libraries luax_initpreload(d_state); } </pre> <p>LuaScoket 除了 C 代码åQŒè¿˜æœ‰ä¸€éƒ¨åˆ†æ˜?Lua 代码åQŒæ‰€ä»¥éœ€è¦?strong>ž®?luasocket-2.0.2/src/*.lua 复制到项目中</strong>åQŒç„¶åŽç”¨ä¸‹åˆ— Lua 代码˜q›è¡Œ‹¹‹è¯•åQ?/p> <pre>local socket = require("socket") print("socket module:", socket) print("socket.connect function:", socket.connect) print("socket.bind function:", socket.bind) print("\n") print("io module:", io) </pre></div><img src ="http://www.aygfsteel.com/ivanwan/aggbug/369555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/ivanwan/" target="_blank">ivaneeo</a> 2012-02-08 00:03 <a href="http://www.aygfsteel.com/ivanwan/archive/2012/02/08/369555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ž®?Lua 模块¾~–译ä¸?C 代码http://www.aygfsteel.com/ivanwan/archive/2012/02/08/369553.htmlivaneeoivaneeoTue, 07 Feb 2012 16:01:00 GMThttp://www.aygfsteel.com/ivanwan/archive/2012/02/08/369553.htmlhttp://www.aygfsteel.com/ivanwan/comments/369553.htmlhttp://www.aygfsteel.com/ivanwan/archive/2012/02/08/369553.html#Feedback0http://www.aygfsteel.com/ivanwan/comments/commentRss/369553.htmlhttp://www.aygfsteel.com/ivanwan/services/trackbacks/369553.html

ž®?Lua 源代码直接放入最¾lˆäñ”品,昄¡„¶ä¸æ˜¯ä¸ªç†æƒ³é€‰æ‹©ã€‚利ç”?LOOP 提供çš?Precompiler 工具åQŒå¯ä»¥å°† Lua 模块¾~–译ä¸?C 代码ã€?/p>

准备工作

LOOP 是一ä¸?Lua çš?OOP 框架åQŒPrecompiler 则是 LOOP 中包含的一个工兗÷€‚要安装 LOOPåQŒå¾—先安è£?LuaRocksã€?/p>

$ wget http://luarocks.org/releases/luarocks-2.0.5.tar.gz $ tar zxf luarocks-2.0.5.tar.gz $ cd luarocks-2.0.5 $ ./configure $ make $ sudo make install 

然后安装 LOOP:

$ sudo luarocks install loop 

OKåQŒçŽ°åœ¨å‡†å¤‡å·¥ä½œå®Œæˆäº†åQŒæŽ¥ä¸‹æ¥ž®±æ˜¯¾~–译 Lua 模块ä¸?C 代码ã€?/p>

¾~–译

我们的框架中有一ä¸?display.lua 模块åQŒä¸‹é¢çš„代码可以ž®†è¿™ä¸ªæ¨¡å—编译出来:

$ precompiler.lua -o luaqeeplayscripts -l "?.lua" -b -p qeeplay qeeplay/display.lua 

最后会得到 luaqeeplayscripts.c/.h æ–‡äšg。其中定义了函数åQ?/p>

qeeplay int luaopen_qeeplay_display(lua_State *L); 

在上˜q°å‘½ä»¤è¡Œä¸­ï¼Œå„个参数的意义如下:

-o: 指定输出文äšg名,例如 -o luaqeeplayscripts 会输å‡?luaqeeplayscripts.c/.h  -l: 指定推断 lua 模块名的模式åQŒè®¾å®šäØ“ -l "?.lua" ž®×ƒ¼šä»?lua 源文件名¿UîC½œä¸ºæ¨¡å—名ã€?    例如 display.lua ž®±æ˜¯ display 模块。如æž?display.lua æ–‡äšgåœ?qeeplay 子目录中åQ?    那么 qeeplay/display.lua 的模块名ž®±æ˜¯ qeeplay.displayã€? -b: ¾~–译为字节码  -p: 函数定义的前¾~€åQŒä¸€èˆ¬æŒ‡å®šä¸€ä¸ªå¯ä»¥æ–¹ä¾¿ä»¥åŽå¯¹ç”Ÿæˆçš?.c/.h æ–‡äšg˜q›è¡Œå†å¤„ç?

如果要将多个 lua æ–‡äšg¾~–译ä¸ÞZ¸€ä¸?C 代码åQŒå¯ä»¥æ·»åŠ æ›´å¤šçš„æ–‡äšg名到命ä×o行中åQŒä¾‹å¦‚:

$ precompiler.lua -o luasocketscripts -l "?.lua" -b -p socket \     socket.lua \     socket/url.lua \     socket/tp.lua \     socket/smtp.lua \     socket/mime.lua \     socket/ltn12.lua \     socket/http.lua \     socket/ftp.lua 

会创å»?luasocketscripts.c/.h æ–‡äšgåQŒå…¶ä¸­å®šä¹‰ä¸‹åˆ—函敎ͼš

socket int luaopen_socket(lua_State *L); socket int luaopen_socket_url(lua_State *L); socket int luaopen_socket_tp(lua_State *L); socket int luaopen_socket_smtp(lua_State *L); socket int luaopen_socket_mime(lua_State *L); socket int luaopen_socket_ltn12(lua_State *L); socket int luaopen_socket_http(lua_State *L); socket int luaopen_socket_ftp(lua_State *L); 

载入¾~–译好的 C 代码

利用前一½‹‡æ–‡ç« ä¸­çš?lualoadexts.c/lualoadexts.håQŒåšä¸€äº›ä¿®æ”¹å³å¯ï¼š

luaqeeplayscripts.c

#include "lualoadexts.h"  // qeeplay #include "luaqeeplayscripts.h"  static luaL_Reg luax_preload_list[] = {     {"qeeplay.display", luaopen_qeeplay_display},     {NULL, NULL} };  void luax_initpreload(lua_State *L) {     .... } 

如果有更多模块需要蝲入,只需è¦?include 相应的头文äšgåQŒåƈ修改 luax_preload_list 定义卛_¯ã€?/p>

]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ¸ßÇå| É̳ÇÏØ| ¸ßÒªÊÐ| ¾üÊÂ| ¼âÔúÏØ| »ªÄþÏØ| Ôæ×¯ÊÐ| ËÄ×ÓÍõÆì| º¬É½ÏØ| Öз½ÏØ| ÷ëÓÎÏØ| ¹ÌÔ­ÊÐ| ÏãºÓÏØ| ³¯ÑôÇø| ÇåË®ÏØ| ÂêÄÉË¹ÏØ| ÎäÒåÏØ| èÏÈÙÏØ| ÐÂÔ´ÏØ| ÁÙ³ÇÏØ| ¿ËÀ­ÂêÒÀÊÐ| ËàÄÏ| ÐËÒµÏØ| ¸¡ÁºÏØ| ɽÑôÏØ| ÉÏÓÌÏØ| ÂÞÆ½ÏØ| Ì©ÖÝÊÐ| ÎäÂ¡ÏØ| °×ɽÊÐ| »áÍ¬ÏØ| ÐÂÓªÊÐ| ÑïÖÝÊÐ| ±öÑôÏØ| Î÷ÄþÊÐ| Ã÷ÐÇ| Öг¬| Ç­¶«| ¡ÁÖ| º£³ÇÊÐ| ¶î¼ÃÄÉÆì|