Lua table转json (Delphi实现)

Lua的table真是无敌了,无比的强大。写了一个函数,将table转为宿主程序的JSON对象,用了qjson。

function ParseTable: TQJson;
var
  KeyType, ValueType: Integer;
  Key, Value: string;
  KeyIndex: Integer;
begin
  Result := TQJson.Create;
  if lua_istable(FLuaState, -1) then
  begin
    lua_pushnil(FLuaState);

    while lua_next(FLuaState, -2) > 0 do
    begin
      KeyType := lua_type(FLuaState, -2);
      ValueType := lua_type(FLuaState, -1);

      if ValueType = LUA_TTABLE then
      begin
        if KeyType = LUA_TNUMBER then //Key为数字,意为数组
        begin
          KeyIndex := lua_tointeger(FLuaState, -2);
          if Result.IsArray then
            Result.Add(ParseTable)
          else
            Result.ToArray.Add(ParseTable);
        end
        else begin
          Key := lua_tostring(FLuaState, -2);
          Result.Add(Key, ParseTable);
        end;
      end
      else begin
        if KeyType = LUA_TNUMBER then //Key为数字,意为数组
        begin
          KeyIndex := lua_tointeger(FLuaState, -2);
          Value := lua_tostring(FLuaState, -1);

          if Result.IsArray then
            Result.Add.AsString := Value
          else
            Result.ToArray.Add.AsString := Value;
        end
        else begin
          Key := lua_tostring(FLuaState, -2);
          Value := lua_tostring(FLuaState, -1);

          Result.Add(Key).AsString := Value;
        end;
      end;

      lua_pop(FLuaState, 1);
    end;
  end;
end;

注:FLuaState为lua_state。

使用方法:

把需要使用的table压入栈顶,然后调用该函数即可。

lua_getglobal(FLuaState, 't');
json := ParseTable(FLuaState);

 

2016-7-25 22:28:41 评论(1) 程序设计
全文完 阅读全文

Laravel5 nginx urlrewrite设置

搞了好几天Laravel,$_GET一直取不出值,才怀疑是不是nginx的urlrewrite配错了。

我之前写的配置是 try_files $uri $uri/ /index.php?$1;

经测试应该为 try_files $uri $uri/ /index.php?$query_string;

正确的设置如下:

server {
    listen       80;
    server_name  域名;
    root         x:/目录/public;

    location / {
        index    index.php index.htm index.html;
        try_files $uri $uri/ /index.php?$query_string;
        #try_files $uri $uri/ /index.php?$1;
    }

    location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;
        include        fastcgi_params;
    }

    location ~ /\.ht {
        deny  all;
    }
}

2016-4-27 01:20:53 评论(0) 程序设计
全文完 阅读全文

Delphi Android开发放置了TFDGUIxWaitCursor仍然报错的问题

利用Delphi开发Android程序,使用SQLite数据库,在DataModule下放置了TFDGUIxWaitCursor仍然报错,

Object factory for class {3E9B315B-F456-4175-A864-B2573C4A2201}, provider [Forms], is missing. To register it, you can drop component [TFDGUIxWaitCursor] into your project

需要将TFDGUIxWaitCursor控件的Provider属性改为FMX才行。

2016-4-13 08:55:09 评论(0) 程序设计
全文完 阅读全文

Delphi在Android下无法调试的问题

最新的Delphi 10 Seattle在Android下调试老是报错,

Unable to start gdbserver on port '64311'
Can't open socket: Permission denied..

没有权限的问题,用Root Explorer给 /data/data/包名 赋上777权限即可。

2016-4-13 08:40:13 评论(0) 程序设计
全文完 阅读全文

eclipse选择指定版本的JDK

64位WIN10系统中安装了64位的JDK,配置好了JAVA_HOME。之后安装了Aptana(eclipse的一个修改版本)。Aptana只有32位的,死活打不开,提示

Failed to load the JNI shared library "C:\Program Files\Java\jdk1.8.0_74\bin\..\jre\bin\server\jvm.dll".

查了资料,是由于JAVA_HOME定义的JDK是64位的,而Aptana是32位的,因此无法使用。

eclipse可以指定你需要使用的JDK版本,在安装目录下修改eclipse.ini(当然Aptana要个性AptanaStudio3.ini),在 -vmargs 之前增加两行:

-vm
c:\Program Files (x86)\Java\jdk1.7.0_55\bin

将路径替换成指定JDK的目录,注意后面有个bin。正常打开。

 

2016-3-21 17:39:27 评论(0) 程序设计
全文完 阅读全文

再见,爷爷

我还在公司查阅招聘简历,接到妈妈的电话。

说实话,我很怕在白天时候接到她的电话,总怕有什么不好的事情发生。电话接通,听到电话那头稍远处传来一阵哭泣。心里有一种不祥的预感。电话那头什么也没说,应该是触宝电话没有接通。过了几秒又一个电话打进来,妈妈让我马上买一张高铁票回来,爷爷刚才去世了。

其实我什么都知道。应该是很早就有心里准备了,就在前年的那个冬天。死神曾经降临过一次,幸运的是当时逃过了死神的魔爪。可这次终究还是逃不脱。

年前的那次拜访,爷爷还能够自如地在房间里走来走去,或是坐在电视机前看看电视。虽然脑袋不太清醒,但这些年身体的状态比往年好多。上周爷爷昏迷住院,我回家探望,也已些许有些好转。回上海四日有余,就听到噩耗传来。

放下电话,感觉到全身都在颤抖,说话紧张到结巴。心痛,那么真实心痛的感觉。却又感觉那么不真实。生离死别的感觉竟是如此般的痛苦。

想要购买高铁票,却已经忘了该如何买票。脑袋是晕的。

地铁上,火车上,眼泪一直在眼眶里打转。想到饭前饭后爷爷拄着拐杖在房间里踱步;想到过年时候推着坐在轮椅上的爷爷到公园里晒太阳;想到爷爷坐在厨房的柴堆旁听他讲过去的故事;想到爷爷带着我到山里捡柴生火;想到爷爷牵着我的手向村里人介绍我“这是我的孙子,什么都好就是不会讲本地话”,我是他的骄傲。

常听爷爷说起他在文革时期被人迫害的日子,那时的他也被剥夺了读书的权利;也常听他提到改革开放后现在过上的好日子;他还常说我们村的悠久历史;有时也会听他提及解放前的一些奇闻异事。

上周见到他的时候,跟他说我来看他了。家人问他会不会认得我,他微微点了点头。我对他说好好保重,明天就出院了。

妈妈说爷爷是幸福的,有个深爱他的妻子对他呵护得无微不至,到老都依旧手紧拉着手在公园散步;有一群孝顺的子孙后代,生病时轮流陪护在身边。

还记得三年前,爷爷意识已不清醒。所有人都不认识,唯独记得我奶奶,他说那是他非常熟悉的人,天天陪在他身边。奶奶怕他谁都不认识晚上在医院孤独,坚持每天与爷爷挤在一个小小的病床上与他共枕而眠。那一日爷爷情绪莫名激动,心跳异常迅速。医生说心率再如此之高恐怕过不了今晚,于是叫回了家中所有人。奶奶看他痛苦的样子,趴在病床边轻声对他说“你就放心地去吧,下辈子我们还要做夫妻。”全家人在一旁痛哭流涕。所幸那一次挺过去了。

这一次不知道在爷爷离去的时候,是谁陪在他身边,又或是全家人都及时赶到。奶奶是否也还在他身旁。

没能在他生命最后的时刻陪他走完是我的遗憾,妈妈发来的短信给了我很大的安慰。我没敢问他走的时候是安祥还是痛苦,希望他只是平静地离开。但我相信他这一辈子是幸运的,一定没有后悔来过。

火车还在路上飞奔,离你的距离也越来越近了,又或是越来越远。夜已深,许多乘客都已睡去。他们演绎着他们的故事,我还在思念着你的故事。想闭上眼睛休息一会儿,明天还有许多事情需要帮忙,需要扛起肩上的担子。但只要一闭上双眼,脑中全是你的声音和样子。

爷爷,你在那个世界还好吗?爷爷,我想你了。

我的其他家人啊,你们一定要好好的。我不能再失去你们。

2016-3-10 22:55:00 评论(0) 生活随笔
全文完 阅读全文

MySQL 1067错误

刚才在Win10里安装MySQL5.7,启动服务时报1067错误,查看日志:

2016-02-09T09:25:23.802959Z 0 [ERROR] InnoDB: Operating system error number 87 in a file operation.
2016-02-09T09:25:23.804966Z 0 [Note] InnoDB: Some operating system error numbers are described at http://dev.mysql.com/doc/refman/5.7/en/operating-system-error-codes.html
2016-02-09T09:25:23.808971Z 0 [ERROR] InnoDB: File .\ib_logfile0: 'aio read' returned OS error 187. Cannot continue operation
2016-02-09T09:25:23.811975Z 0 [ERROR] InnoDB: Cannot continue operation.

求助于网上资料,只需要在my.ini的最后添加一行:

innodb_flush_method=normal

问题解决。

2016-2-9 17:30:39 评论(0) 程序设计
全文完 阅读全文

Laravel 5.2 Blade section 学习笔记

这几天在学Laravel,综合官方文档及网上资料,记下一些心得。

Blade的视图文件存放在resources/views目录下,文件名以.blade.php结尾。

定义片断(section):

<body>
    @section('text')
        Hello, World.
    @endsection
    <h1>@yield('text', '默认值')</h1>
</body>

@section的作用是定义一个片断;

@yield的作用是应用片断,第二个参数的作用是设置默认值,当找不到text片断时显示该值,可省略。

以上代码输出:

<body>
    <h1>Hello, World.</h1>
</body>

@endsection还可以变更为@show,意为当程序执行到这一行的时候,立即输出该片断(section)。可放在布局模板中,相当于yield加入了默认值参数。如果在后续代码中找不到该section,则显示section里的默认值。

引入(继承)一个模板:

@extends('模板名')

模板可放在子目录中,引用的时候用点“.”代替目录分隔符。若文件为layout/master.blade.php,引用为@extends('layout.master')。

section可定义多次,用@parent引用父section,但要注意section定义的顺序。php代码是由上往下执行,先定义的section先执行,后定义的section后执行。但最终显示的顺序与此相反,后定义的section为父,先定义的section为子。所以是由先写的section继承后写的section。

<?php
    $a=0;
?>
<body>
    @section('text')
        <h1>Hello, {{$a+=11}}</h1><br />
        @parent
    @endsection
    @section('text')
        <h2>World, {{$a+=33}}</h2><br />
    @endsection
    @yield('text')
</body>

以上代码输出的值为:

<body>
    <h1>Hello, 11</h1><br />
    <h2>World, 44</h2><br />
</body>

可以看到,“Hello”继承了“World”的section,并将“World”的内容插入进来,但是输入的值却是根据程序执行顺序由上到下计算的。
 

2016-1-31 22:20:57 评论(1) 程序设计
全文完 阅读全文

入手 New 3DS

New 3DS

纠结了好几周,终于还是经不住诱惑,入手了Nintindo New 3DS。主要原因是嫌之前的3DS XL太重了。买的是黑色,因为看中了《怪物猎人X》的限定外壳,感觉与黑色比较搭。

收到New 3DS之后,被这块具有3D防抖功能的屏幕惊艳到了,果真左晃右晃3D效果都能够根据视线自动转移,真是任天堂的黑科技。相比之前3DS XL的体积和重量,New 3DS适合我了。增强了的机能也可以玩超想玩的《异度之刃》了。

2015-12-26 20:09:50 评论(0) 生活随笔
全文完 阅读全文

人间的扎尕那

扎尕那

 

2015-8-18 21:35:31 评论(0) 旅行杂记
全文完 阅读全文
1/29, 281 « 123456 »