最近帮朋友开发调试VPN,真真正正感受了一把在线合作开发的感觉。
我们处在不同的地方,通过网络联系(使用MSN和Skype),进行实时的文字和语音交流,以及传送一些文件。我们通过IPSEC隧道(OpenSwan)将两边的小网络连在一起,变成一个局域网。并且我通过VPN(OpenVPN)登陆上去(使用USB Key),数据通讯都是经过重重加密(OpenSSL)。
下面是我们的网络环境示意图:

开发涉及到Window部分和Linux两大部分,基本开发(VC 6 / MinGW / SlickEdit / UltraEdit / GCC)在我自己本地进行,然后SSH到对方的服务器上远程编译调试(GCC / GDB),服务器端将来会移植到RISC的CPU上,使用裁减后的Linux。
运用各种技术手段,感觉整个网络都under control,非常爽!
.lua测试脚本
在编写第一个Lua程序之前,我们先编写一个.lua脚本以供调用,代码如下:
- -- test.lua
- print("Hello Lua !")
其中,两个连续的减号意味着这是一行注释。我们期望执行这个.lua脚本的结果是在屏幕上打印一串“Hello Lua !”的字符串。
提示:多行注释使用“--[[”开始,以“]]”结束。
内嵌Lua解释器
现在我们来写一个最简单的控制台程序,并在其中内嵌Lua解释器,运行该程序,可以执行test.lua脚本,在屏幕上打印出我们希望的结果。先来看代码,然后再解释代码内容:
- extern "C"
- {
- #include "../include/lua/lua.h"
- #include "../include/lua/lualib.h"
- #include "../include/lua/lauxlib.h"
- }
- #pragma comment(lib,"../lib/liblua.lib")
- int main ( int argc, char *argv[] )
- {
- /* the Lua interpreter */
- lua_State* L;
- /* initialize Lua */
- L = lua_open();
- /* load Lua base libraries */
- luaL_openlibs(L);
- /* run the script */
- luaL_dofile(L, "test.lua");
- /* cleanup Lua */
- lua_close(L);
- return 0;
- }
看看这代码,我都不用作解释了。 :)
编译上述代码,最终我们会有两个文件:testlua.exe和test.lua。将这两个文件放到同一个目录下,在命令行模式执行testlua.exe,就可以看到我们期望的输出了!
就是这么简单!!下一次,我们将尝试在.lua脚本中调用主程序(testlua.exe)内部的C函数~~
今天在家里将coolcode插件装上了,测试了一下,效果那是相当的好。可惜一点:作者为了能够支持从页面上复制的代码粘贴到Word中,同时保持颜色信息,就将颜色硬编码到后台PHP文件中了。但是这并不是我想要的,因为我的页面主体是深色调的,导致直接使用他的颜色会非常刺眼。所以我做了一些修改,把PHP中的硬编码又去掉了,然后重新配色,以符合我的Blog的色彩搭配。
看看效果:
- // This is one-line comment.
- /*
- And this is multi-line
- comments for read.
- */
- #include <iostream> // Use STL. (BUG: inline comment not work.)
- #include <string>
- int main(void)
- {
- string strInfo("Hello CoolCode!");
- int i = 0;
- if(0 == i)
- {
- cout << strInfo << endl;
- return 0;
- }
- else
- {
- cout << "ERROR: Some bad thing happened." << endl;
- return -1;
- }
- }
可以看出,绝大部分代码的色彩已经可以很好的显示了,这就已经足够了。CoolCode插件真是太棒了,赞一个~~~
这样,我就可以继续Lua编程之旅了。
PS.双击左侧的代码行数列,可以隐藏代码行数显示,试试看~~
要在自己的程序中使用Lua,我们必须将Lua解释器核心编译到自己的程序中来,无论是直接编译到主程序中,还是作为外部DLL调用,总之,第一件事情是编译Lua解释器核心。
说明:以后的操作如果没有特别注明,就是在Windows平台上进行的。
首先,到Lua官方网站下载最新的Lua源代码,得到的是一个.tar.gz。可以用流行的压缩软件如WinZip,WinRAR,或者开源的7z(推荐使用)来解开。解开的目录中有一个src目录,整个Lua核心代码就在这里了。
我们在Windows平台上拟使用Visual C++ 6.0来进行试验,但是src目录中并没有VC6使用的工程文件。这个问题很好解决:在VC6中新建一个Win32 Static Library静态库工程,建议工程名称设置为liblua,工程路径指向Lua的src目录,最好的方式是先设置工程名称,然后修改工程路径(为什么?你试试就知道了 -:) )。在随后的工程设置向导中,不要加入任何设置,即,不要勾选“Pre-Compiled Header”和“MFC Support”选项。
接下来,将所有src中的所有 .c (lua.c除外)和 .h 文件加入到工程中,编译,就可以得到我们想要的静态库 liblua.lib 文件了。
在我们自己的软件项目中,只需要 liblua.lib 和 几个头文件就可以开发了, 所以我们需要把这些文件整理一下,放到合适的位置。我是这样放的:
建立include目录,然后在include目录下建立lua目录,将下列文件复制到lua目录下:
- lauxlib.h
- lua.h
- luaconf.h
- lualib.h
建立和include目录同级的lib目录,将编译好的 liblua.lib 放到这里。可以参考下图:

图中,exe和dll两个目录是打算用来存放自己写的测试程序的。
这样,我们的开发环境就配置好了,下一次,我们将开始做第一个调用lua脚本的小程序,来真正体验lua的威力。
![Apex[有所思,有所志]](http://apex.ncksoft.com/wp-content/themes/deepwater/images/dw_site_logo.png)