如何通过ScriptControl访问js中的数组元素?
如后面所述,取得classname的值没问题,但和数组有关的就不会了.搜索了一下,有个叫IEnumVariant的接口可能有关系,但网上的例子和我使用的ScriptControl环境有较大区别,没找到办法用上。
代码如后,补充:
mmoJson的内容:
{"classname":"初二一班","pupils":[{"name":"张三","sex":"男"},{"name":"李四","sex":"女"}]}
mmoJs的内容:
- JScript code
function testMain(sJson){var myObject = eval('(' + sJson + ')'); return(myObject); }- Delphi(Pascal) code
unit uFormMain;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TFormMain = class(TForm) Button1: TButton; mmoJs: TMemo; mmoJson: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } function GetJsObject(Source:string):OleVariant; public { Public declarations } end;var FormMain: TFormMain;implementationuses ComObj,ActiveX;{$R *.dfm}procedure TFormMain.Button1Click(Sender: TObject);var obj,retVal:OleVariant; code:WideString;begin obj:= GetJsObject(mmoJson.Text); showmessage(obj.classname); //如何读取pupils下面的数组(或叫集合)数据呢? //目前只知道在VB6中可For Each oPupil In obj.pupils遍历访问end; function TFormMain.GetJsObject(Source: string): OleVariant;var obj,retVal:OleVariant; code:WideString;begin code:=mmoJs.Text; obj:=CreateOleObject('MSScriptControl.ScriptControl'); obj.Language:='javascript'; obj.AddCode(code); retVal:=obj.Run('testMain',Source); if VarIsNull(retVal) then Result:='' else Result:=retVal;end;end.[解决办法]
看下这篇文章,应该可以解决你的问题
http://blog.csdn.net/jayqiang/article/details/7066824
[解决办法]
不知道怎么回答