• [导入]ASP进阶:VB中的模块,类,ActiveX与API的使用



    这几天搞了点c/s结构的程序设计, 由于ASP用得比较熟练,所以VB6.0自然成为我首选的开发工具. 在学习过程中,我结合自己的经验总结下VB中的一些高级应用,并且体会这种应用给我们所带来的好处.

    一、模块 (Module)

    在VB中,模块会优先执行,其实说白了,模块就象是全局的过程和函数调用.这是初步的提高代码可复用性的途径。我想有经验的ASP(VBSCRIPT,以后都只用VBScript来写Asp程序)程序员都用过<!--#Include file=""-->这条语句吧,这对提高代码的可复用性是比较方便的,在VB里模块就完成了这个功能.值得注意的是在模块中可以定义Sub Main() 过程,并且在启动里面可以让程序从Main()过程进入.这有点象c,c++中的main()函数. 不过模块的代码可重用级别还是停留在过程,函数调用上.

    二、类模块

    在VB中,可以建立类模块.类模块类似于ASP中的类.我想有经验的Asp程序员应该都有自己的类库吧.一般情况下我们怎么在ASP中引用自己的类库呢?对,还是include,只要把类文件包含进来就行了. 在调用的时候只要 Set xxx= new ClassName 就行了.这个和ASP中也是一样的.用类模块有什么好处呢? 因为使用类可以定义一些公用的方法和过程,可以将代码的可重用行达到一个更高的高度.

    三、ActiveX技术

    可能大家会想,无论是用模块还是类模块,可能很多功能都会在下一个项目用到.如果这个时候我们需要那些功能的话,可以直接把类模块和模块代码考到Vb项目中.在ASP中,我们只要把类代码做成文件,然后在其他应用include进来就行了.但有一个问题,那就是代码的封装行.因为不论是类模块还是模块,或者ASP中的写有类的.asp文件,代码可以被人看并加以修改.有没有办法能使代码不让人看到呢?答案是肯定的,这个就是ActiveX控件技术. ActiveX 的优点在于可以不同的语言编写ActiveX控件,只要符合约定的规范就行,然后可以被其他语言调用.而且代码是编译好了的.这个对于ASP来说,可以提高运行速度.好了,废话少说,下面看看给出一个实际使用的例子吧:

    1.首先建立一个ActiveX dll工程,然后把名字写成TestDll.在类模块里的代码为:

    Option Explicit
    Private mdbl_augend As Double
    Private mdbl_addend As Double

    Public Property Get augend() As Double
    augend = mdbl_augend
    End Property

    Public Property Let augend(ByVal vNewValue As Double)
    mdbl_augend = vNewValue
    End Property

    Public Property Get addend() As Double
    addend = mdbl_addend

    End Property

    Public Property Let addend(ByVal vNewValue As Double)
    mdbl_addend = vNewValue
    End Property

    Public Function Plus()
    Plus = augend + addend
    End Function

    2.文件->生成TestDll.dll. 这样我们就得到了一个名为TestDll.dll的文件了,这个就是一个ActiveX控件了.这个控件有2个属性,一个函数.可以计算出2个属性的和.

    3.VB调用TestDll.dll. 新建一个exe工程.工程->引用->浏览,选中TestDll.dll文件,然后随便拖个按钮,在按钮里写以下代码:

    Private Sub Command1_Click()
    Set objSum = New Sum
    objSum.augend = 10.52
    objSum.addend = 382.41
    Result = objSum.Plus
    MsgBox Result
    Set objSum = Nothing
    End Sub
    代码就不用我解释了.你可以看到弹出一个对话框显示2个属性的和.

    3.ASP调用TestDll.dll文件. ASP调用dll文件和vb也差不多.刚才vb调用时我们要添加一个引用来找到dll文件.而ASP需要注册以后才能调用.所以先建立一个setup.bat文件,里面写如下代码:Regsvr32.exe TestDll.dll 如果这个bat文件不在TestDll.dll的同级目录下面,你需要加上TestDll.dll的绝对路径. 或者直接在运行里敲Regsvr32.exe E:\website\work\dll\TestDll.dll.这样TestDll.dll就注册了,下面我们写个文件来测试一下:

    <%
    Dim objSum
    Set objSum = Server.CreateObject("TestDll.Sum")
    objSum.augend = 10.52
    objSum.addend = 382.41
    Result = objSum.Plus
    Response.Write Result
    Set objSum = Nothing
    %>

    怎么样,网页上是不是显示了392.93呢? 这样ASP就调用了这个TestDll.dll文件了.

    其实在ASP中调用ActiveX控件可以有很多好处,如果是大型的B/S软件项目,这样可以将业务逻辑封装在ActiveX里面,而ASP只要调用就行了.唯一的缺点就是需要注册组件.不过我们有一个变通的方法,在ASP5.0以上可以支持类,我们可以用VBScript的类来代替组件,这样也能实现封装,只不过在性能上要慢些. 不过现在.net技术解决这个问题. 因为asp.net是建立在.net framework基础上的,所以用.net写出的dll文件不需要注册. 具体的以后可以出.net MVC模式的文章同大家探讨.

    四、API调用.

    VB的强大之处就是可以调用WinAPI,这样原本VB完成不了的功能都可以通过API来完成. 要调用API首先也需要引用它.VB里提供了一个API Show的小工具给我们使用.这样可以省去很多调用API的麻烦.要调用API,首先要建立模块,在模块里申明调用的API,下面我写一个小程序,就是让窗口始终显示在最上面.调用API代码如下:

    Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long


    '常量声明
    Global Const SWP_HIDEWINDOW = &H80
    Global Const SWP_NOACTIVATE = &H10
    Global Const SWP_NOCOPYBITS = &H100
    Global Const SWP_NOMOVE = &H2
    Global Const SWP_NOOWNERZORDER = &H200
    Global Const SWP_NOREDRAW = &H8
    Global Const SWP_NOREPOSITION = SWP_NOOWNERZORDER
    Global Const SWP_NOSIZE = &H1
    Global Const SWP_NOZORDER = &H4
    Global Const SWP_SHOWWINDOW = &H40
    Global Const HWND_BOTTOM = 1
    Global Const HWND_BROADCAST = &HFFFF&
    Global Const HWND_DESKTOP = 0
    Global Const HWND_NOTOPMOST = -2
    Global Const HWND_TOPMOST = -1
    Global Const HWND_TOP = 0
    Global Const Flags = SWP_NOMOVE Or SWP_NOSIZE

    然后我们在窗体里加如下代码:

    Private Sub Form_Load()
    Dim Success As Long
    Success = SetWindowPos(Me.hwnd, HWND_TOPMOST, 10, 0, 0, 0, Flags)
    End Sub

    运行下看看,是不是窗体始终在最前面呢?

    研究了下VB后发现,其实VB还是提供了一些封装的技术的.比如模块,类模块,还有ActiveX,并且VB能够调用API来弥补自身功能的不足.最主要的是VB简单易学,而且还提供了很多数据库操作的控件.

    由于本人用VB用得比较少,有错误之处还请指出. http://www.ncycglass.com/blog 有兴趣的看看本人的blog,一同探讨.


    文章来源:http://computer.mblogger.cn/wucountry/posts/39641.aspx
    ================================
      /\_/\                        
     (=^o^=)  Wu.Country@侠缘      
     (~)@(~)  一辈子,用心做一件事!
    --------------------------------
      学而不思则罔,思而不学则怠!  
    ================================
  • 相关阅读:
    Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
    Centos安装openjdk
    centos7安装nodejs
    Linux服务器集群性能监控之Performance Co-Pilot(PCP)部署
    asp.net(c#)网页跳转七种方法小结
    C# 获取文件名及扩展名
    C#中的 具名参数 和 可选参数
    数据契约(DataContract)
    用LINQ在集合中查询特定对象
    jQuery中append、insertBefore、after与insertAfter方法注意事项
  • 原文地址:https://www.cnblogs.com/WuCountry/p/305737.html
Copyright © 2020-2023  润新知