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了,是如此的方便。