欢迎您光临博庭社区!

 找回密码
 立即注册
查看: 9688|回复: 28

用 .net dll 代替 VBS [复制链接]

Rank: 9Rank: 9Rank: 9

发表于 2013-5-26 11:54:44 |显示全部楼层
最新版的金魔方已经支持VBS了,但是VbScript是一种解释性的语言,它的速度不是一般的慢,而是非常非常的慢。事实上,在金魔方中,完全可以用.net dll来替换掉VBScript,速度可以提高几十倍。感兴趣的可以下载示例来对比一下。   
用.net dll来替换掉VBScript相当容易,都是微软出品,很多语言元素可以一一对应。以下是网上找的一个VBS脚本,和改成 .net dll的代码对应。
例一:设计一个公式,计算收盘价对应的涨停价位(设涨停板为10%),当然实际中,这个并不需要用VBS来实现,这里仅仅为了示例:

从以上代码可以看出,两者的代码是几乎可以一一对应的,主要不同之处在于:
1. .net(C#为例)是编译性语言(尽管不是编程成机器码),因此你需要安装微软 visual studio 开发环境,除了2008不行,2010,2012都应该可以,只要使用 .net framework 4.0以上的类库。

2. .net(C#为例)是强类型的,也就是每个变量都需要声明类型,因此需要强制转换,比如 float var1 = (float)var2;

3. 原来访问飞狐的接口 FML.VarData("name") 之类的函数调用,变成GetVarData, SetVarData调用。


4.公式嵌入 VBS 用 <% %> 括起来,调用 .net dll 需要先声明
比如 extern 'DotNetReplaceVBS.dll'  void  N.Class1.CalcZtj(), 然后直接调用 CalcZtj();

下面以图片的形式把大致开发的主要步骤列出:
1. visual studio 新建一个类库 工程,用C#或者VB.net,Managed C++都可以,这里以C#为例


2.添加 金魔方 .net api dll 引用,位置位于金魔方安装目录下 DotNetBridge.dll



3.新建或者修改 从 Formula 继承 一个类,Formula 是金魔方.net api的类,从此类继承可以访问 GetVarData等接口函数,需要用 fox.api 命名空间


4.接下来加你需要的方法就可以了,编译dll,把dll复制到 金魔方 fmldll下,编写对应的公式,调用函数就ok了以下是两个公式的对比结果,可以看出,完成完全一样的功能,一样的结果,时间上差的不止几个级别


综上所述,VBScript 是飞狐时代非常好的一种语言扩展,能做到飞狐语言上不支持的一些操作。但是随着金魔方语言本身的完善,原来大部分只能用VBScript 实现的现在其实用金语言本身就可以实现。实在金语言本身实现不了的,可以用 .net 实现,也是很方便的,而且比VBScript 效率高很多,经过测试,几乎是达到c语言写的dll级别。当然,VBScript 仍有自己的优点,就是其不需要事先编译,不需要装开发环境,直接嵌入到公式代码本身。大家根据需要选择了。










附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

使用道具 举报

Rank: 3Rank: 3

发表于 2013-5-26 18:14:44 |显示全部楼层
哈哈
照顾到了狐朋股友
还有更好的编写方式
恭喜老大们!谢谢!
建议老大们搞个教程
让俺等菜鸟们对新函数先入个门

使用道具 举报

Rank: 4

发表于 2013-5-26 19:29:59 |显示全部楼层
学无止境

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2013-5-26 20:42:28 |显示全部楼层
能否提供下Managed C++的例子?还有fox.api的详细的文档说明

使用道具 举报

Rank: 6Rank: 6

发表于 2013-5-27 18:01:12 |显示全部楼层
学习了!谢谢分享!

使用道具 举报

Rank: 3Rank: 3

发表于 2013-5-27 21:18:10 |显示全部楼层
强大,可惜没学过,不知什么地方可以学编程

使用道具 举报

Rank: 9Rank: 9Rank: 9

发表于 2013-5-30 20:59:07 |显示全部楼层
nttz 发表于 2013-5-26 20:42
能否提供下Managed C++的例子?还有fox.api的详细的文档说明

提供的API现在是比较简单的,在C#工程里,refrence 里直接双击 DotNetBridge 就可以浏览 fox.api命令空间里的一些类,例如 Formula,基本提供的方法和在VBS里能调用的是一致的 附上 Managed C++的例子




附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2013-5-31 08:40:25 |显示全部楼层
ktdev 发表于 2013-5-30 20:59
提供的API现在是比较简单的,在C#工程里,refrence 里直接双击 DotNetBridge 就可以浏览 fox.api命令空间 ...

你这个包里没有工程文件啊,有08或更早的解决方案么,而且好似实现放到头文件中去了,看了有点不习惯,能否搞稍微复杂的函数看看

使用道具 举报

Rank: 9Rank: 9Rank: 9

发表于 2013-5-31 11:32:10 |显示全部楼层
nttz 发表于 2013-5-31 08:40
你这个包里没有工程文件啊,有08或更早的解决方案么,而且好似实现放到头文件中去了,看了有点不习惯,能 ...

DotNetReplaceVBS_CPP.vcxproj 就是工程文件,熟悉c++的话很容易可以移到cpp中
复杂的函数要看具体是什么应用

使用道具 举报

Rank: 6Rank: 6

激情奖

发表于 2013-5-31 17:22:08 |显示全部楼层
本帖最后由 nttz 于 2013-5-31 17:27 编辑
ktdev 发表于 2013-5-31 11:32
DotNetReplaceVBS_CPP.vcxproj 就是工程文件,熟悉c++的话很容易可以移到cpp中
复杂的函数要看具体是什么 ...

DotNetReplaceVBS_CPP.vcxproj在vs08下打不开啊,只有vcproj类型的,还是版本太高了

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

bottom

Archiver|http://www.patiosoft.com

GMT+8, 2017-12-11 12:18 , Processed in 0.060326 second(s), 12 queries .

花生网 Copyrigh©2012

和讯信息科技有限公司 ALL Rights Reserved 版权所有 复制必究

回顶部