以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  关于VBA的混合编程,使用VB6.0做 ActiveX Dll  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=97480)

--  作者:zyyh
--  发布时间:2016/5/16 15:11:50
--  关于VBA的混合编程,使用VB6.0做 ActiveX Dll
一直不大明白为嘛论坛上 没用VB6.0混合编程的对象,真的很简单很简单
VB6.0 做ActiveX dll 是非常非常简单的。以下是举例对象
打开VB.6.0  新建工程--选择 ActiveX dll,进入里面后
第一处修改 :主菜单的工程-属性-工程名称  把 工程1 改为 烛影摇红
第二处修改:在工程视图里面 选中 类模块-class1 ,将 Class1  改名为 类
添加 以下代码,粘贴复制就好了

Public Function huoqu_shuzu1(数组 As Variant, ByRef 传出数组 As Variant) As Boolean
  ReDim 传出数组(UBound(数组))
  For a = 0 To UBound(数组)
    传出数组(a) = 数组(a) + 1
  Next
  huoqu_shuzu1 = True
End Function

\'计算5均线
Public Function jisuanjunxian5(ByVal jia1 As Single, ByVal jia2 As Single, ByVal jia3 As Single, ByVal jia4 As Single, ByVal jia5 As Single) As Single
   jisuanjunxian5 = (jia1 + jia2 + jia3 + jia4 + jia5) / 5
End Function

然后  在主菜单中 文件 --生成烛影摇红    记住生成的位置  

下一步 就在这个位置里面  找到生成的 烛影摇红.dll    在win7下 直接双击 就可以注册  在别的系统 要手动 注册,
注册方法  在开始菜单底下 运行 regsvr32  D:\\烛影摇红.dll   就好了

切换到金字塔 到  与公式新建  这个页面的底下 有个 公式  这两个字,与它相同的  还有高级,选中 高级 --模块- Function
停止  运行 Function  就是上面的 那个 方块点下就好了 
\'复制 粘贴以下代码
Sub test4()
    Dim zyyh \'创建一个变量
Set zyyh = CreateObject("烛影摇红.类")\'记住 烛影摇红 和 类  这两个词  是上面修改的
dim a()
dim b()
redim a(2)
redim b(2)
a(0)=23
a(1)=34
a(2)=45
msgbox zyyh.huoqu_shuzu1(a,B)
        msgbox UBound(b)
        msgbox zyyh.jisuanjunxian5(1,2,3,4,5)
End Sub

然后 在金字塔的主菜单-运行-宏 输入名称 test4
好了  一切OK  无论传入数组 还是传出数组  传递参数 和传出参数 都有了。
语言和VBA基本上一样,但是VB6.0 却远远比 VBA灵活的多。

--  作者:pel46585
--  发布时间:2016/5/16 23:00:51
--  
好文章,建议加精。
满世界都是C++的DLL的文章,这文章让人耳目一新。
但1、VB6.0跟这个VBS比,功能上其实没啥差异,基本上VB能干的,这个金字塔的语言也都能完成。这方面不同意楼主。运行速度上,我没比较过,估计也差不多吧。哦可能还是有些差异的,比如金字塔不能直接前期定义一些东西,使用API上,VB更方便些,可能。
   2、VB的DLL不能直接在公式调用,想在公式里直接调用,有点麻烦。

--  作者:zyyh
--  发布时间:2016/5/17 17:19:37
--  
以下是引用pel46585在2016-5-16 23:00:51的发言:
好文章,建议加精。
满世界都是C++的DLL的文章,这文章让人耳目一新。
但1、VB6.0跟这个VBS比,功能上其实没啥差异,基本上VB能干的,这个金字塔的语言也都能完成。这方面不同意楼主。运行速度上,我没比较过,估计也差不多吧。哦可能还是有些差异的,比如金字塔不能直接前期定义一些东西,使用API上,VB更方便些,可能。
   2、VB的DLL不能直接在公式调用,想在公式里直接调用,有点麻烦。


说这个主要是因为  VB6和VBA的语法基本上 一模一样 ,但是VB6 的灵活性非常好。这样会大大大的降低 编写者的难度。
其实这个也可以用 NET做  VB.NET,C# 都可以,不清楚为嘛 版主估计偷懒吧,真正的仅仅是做成 ActiveX dll 就好了,喜欢哪种语言 都可以转过去


--  作者:zyyh
--  发布时间:2016/11/25 16:05:43
--  
其实你去看VBS的变量定义 是没有结构的说法的,我不清楚有没有线程的说法
但是DLL里面可以设置结构和使用线程来处理大数据计算。
以前在VBS里面设置,卡的要死,后来把数据计算全部放进线程里面搞,简直神速,而且不卡