VB6创建ActiveX exe简单方法

VB6创建的COM即可以是线程内的DLL,也可以是线程外独立的EXE,有些32位的旧东西做activex.exe封装后在新硬件新软件x64位上用还是可以的。其实activex DLL和activeX EXE主要功能并不需要改变。activex DLL可以是如下的样子:

一个主工程文件,添加了一个类,为类功能隐藏了一个窗体。

在类里封装一个PowerBasic写的DLL,编译后的 Activex DLL即可由外部调用其内部的Public功能ModbusRoutines。在此基础上,再加上一个窗体和模块(是bas模块,不是cls类模块)

其中form1是个空窗体,visible = false,后面我们讲它的功能。

加的模块中写上一些简单代码,用active exe方式编译就生成了 exe 方式的COM,它是独立运行的程序。

Module1.bas 中的内容

Sub Main()
    If Command() <> "!@#$*&^%12348765" Then
        End
    End If
    If App.PrevInstance = True Then
        End
    Else
        If App.StartMode = vbSModeStandalone Then
            Load Form1
        Else
            End
        End If
    End If
End Sub

功能:

首先读取命令行参数,如果不是特定字符串即终止加载,这样做的目的是防止用户单独运行此activex exe程序,而必须由主程序带上参数调用它。

然后app.PrevInstance是判断是已经加载并运行中,以防程序重复加载。

如果没有加载,按activex模式运行,那么就load form1空窗体。这样程序就不会运行到此直接退出了,否则加载即退出不能正常使用。这地方停顿下来,load 空窗体还是比较方便有效的。

修改一下工程属性为 activex exe, 启动对象为 sub main,编译后即是可执行文件方式的 COM 。做个VB6的标准exe工程,放个窗体,两个button和一个文本框,即可测试调用的功能了。

Dim obj As Object
Private Sub Command1_Click()
    Text1.Text = obj.ModbusRoutines(11, "VERSION")
End Sub

Private Sub Command2_Click()
    Dim sReturn As String
    sReturn = obj.ModbusRoutines(12, "Terminate")
    Text1.Text = sReturn
End Sub

Private Sub Form_Load()
    Dim dReturn As Double
    dReturn = Shell(App.Path & "\MBFMODIEEE.exe !@#$*&^%12348765", vbHide)
    Set obj = CreateObject("MBFMODIEEE.MBFIEEECRC")
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Set obj = Nothing
End Sub

在通用部分定义 dim obj as object, 在创建窗体时shell执行刚才编译的activex exe并带上参数,然后创建activex exe中类的 obj , 命令按钮1调用COM中的函数并在text文本框中显示返回的字符串,命令按钮2则高用函数12号的Terminate,功能是 unload form1。现在可以把它编译成标准 exe 文件并运行。

它自动加载并启动activex exe,不会重复加载,退出程序前,点击命令钮2将activex load的窗体unload了,当set obj=nothing时,打开任务管理器,会看到APP和COM程序同时退出。下面是activex 的public函数的12号功能,就是一个unload form1.

    Case 12
        If commandval = "Terminate" Then
            Unload Form1
            ModbusRoutines = "Ready!"
        End If

可以将它放在QueryUnload过程中,退出时让它自动执行。

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    Dim sReturn As String
    sReturn = obj.ModbusRoutines(12, "Terminate")
    sReturn = obj.ModbusRoutines(12, "Terminate")
    Set obj = Nothing
End Sub

这是比较简单的封装,实际上按VC的终端程序理解activex exe比较有对应性。它自己是一个类,有初始化与终止处理,就当做是构造与析构吧; 它有属性 let 和 get, 而 sub main 很类似于VC的main; 它也有接口,但很啰嗦,不像VC的virtual函数那么简单明了。但是复杂的东西可以简单化,就比如上面的做法,找核心的写就可以了。如果app和activex在不同的机器上,Set obj = CreateObject("MBFMODIEEE.MBFIEEECRC","机器名") 。

源代码下载

https://download.csdn.net/download/weixin_45707491/88234856?spm=1001.2014.3001.5501

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值