七猫的藏经阁

其实只是垃圾箱

VC知识库BLOG 首页 新随笔 联系 聚合 登录
  194 Posts :: 0 Stories :: 622 Comments :: 4 Trackbacks

公告

其实我们每个人都是井底之蛙,最多在不同的井而已。

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

好友

搜索

最新评论

阅读排行榜

评论排行榜

Squirrel是个脚本,再具体的就不说了,直接看代码。
#pragma pack(push,1)
namespace DZH
{
struct DayData
{
unsigned long date;//date的格式:20070423
unsigned long open;//开盘价
unsigned long high;//最高价
unsigned long low;//最低价
unsigned long close;//收盘价
unsigned long moneysum;//成交金额
unsigned long turnover;//成交数量
char unused[12];//保留
};
}
#pragma pack(pop)

DZH::DayData curData;

SQInteger ScriptGetOpen(HSQUIRRELVM v)
{
StackHandler sa(v);
int paramCount = sa.GetParamCount();
//假设只有一个参数,也确实只有一个参数,我们现在先没有参数传递进去吧。//sa.GetInt(i)),sa.GetString(i)来获得参数
return sa.Return((INT)curData.open);
}

SQInteger ScriptGetClose(HSQUIRRELVM v)
{
StackHandler sa(v);
int paramCount = sa.GetParamCount();
//假设只有一个参数,也确实只有一个参数,我们现在先没有参数传递进去吧。//sa.GetInt(i)),sa.GetString(i)来获得参数
return sa.Return((INT)curData.close);
}

这里定义了两个在脚本里可以调用的函数
初始化一下
SquirrelVM::Init();
SquirrelVM::CreateFunctionGlobal(ScriptGetOpen,"GetOpen",_T(""));
SquirrelVM::CreateFunctionGlobal(ScriptGetClose,"GetClose",_T("")); // String var name.
SquirrelObject scriptfunc=SquirrelVM::CompileBuffer("function ciao()\r\n{ return GetOpen()-GetClose();\r\n}");//这里用到了上面定义的函数
SquirrelVM::RunScript(scriptfunc);

使用:
SqPlus::SquirrelFunction func_formula(_T("ciao"));
int ival = func_formula();
这样就OK了,是如此的方便。
posted on 2008-07-03 13:55 Diviner 阅读(844) 评论(2)  编辑 收藏

Feedback

# re: 在程序里使用Squirrel脚本互相调用。 2008-07-03 14:22 Diviner
导出C++类的方法
typedef DZH::DayData DZH_DayData;

DECLARE_INSTANCE_TYPE(DZH_DayData)
void DefineClass()
{
SqPlus::SQClassDef<DZH_DayData>(_T("DZH_DayData")).
var(&DZH::DayData::date,_T("date")).
var(&DZH::DayData::open,_T("open")).
var(&DZH::DayData::high,_T("high")).
var(&DZH::DayData::low,_T("low")).
var(&DZH::DayData::close,_T("close")).
var(&DZH::DayData::moneysum,_T("moneysum")).
var(&DZH::DayData::turnover,_T("turnover"));
}


然后执行
curRecord->AddItem(new CXTPReportRecordItemNumber(func_formula(&curItem)));
即可

# re: 在程序里使用Squirrel脚本互相调用。 2008-07-03 14:29 Diviner
SquirrelObject scriptfunc=SquirrelVM::CompileBuffer("function ciao(item)\r\n{ return item.open;\r\n}");


标题  
姓名  
主页
验证码 *
内容   
  登录  使用高级评论  Top
[使用Ctrl+Enter键可以直接提交]