VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用

VB6写的ActiveX EXE公共对象是外置进程,因此,尽管它是x86 32位的进程,但可以集成到 VB.NET的x64和x32程序中使用。

VS2022的VB.NET程序,调用ActiveX DLL对象我在上篇笔记中写了

VB.NET通过VB6 ActiveX DLL调用PowerBasic及FreeBasic动态库_Mongnewer的博客-CSDN博客

为了简短,调用ActiveX exe就在它上面做修改。

1. 对填加依赖项的修改

对于Activex DLL注册过的COM在填加引用时是可以在列表中看到的,而Activex EXE方式的COM则需要直接填加 EXE 那个文件,在项目管理器的依赖项中会显示出类的名称。

VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用_第1张图片

2. 有了COM依赖项,Imports 引用就和 Activex DLL一样了,之后建接口也是一样的。

VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用_第2张图片

3. ActiveX EXE的加载

因为Activex EXE是外部程序,使用时必须先加载,不然Imports和new接口没办法工作。想了想就在创建应用时,在它的new里装入吧。

VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用_第3张图片

 4. 退出处理

退出实际上不用处理,只是在系统的任务管理器中会留下 Activex EXE 无控制的运行,下次重启系统也就没有了,而且它几乎不占资源,但遇上有人计较就是个不完美的问题。CSDN高人无数,就将博主 ssmi 的原码和版权声明一同贴到FormClosed过程中,让它到系统中找ActiveX EXE进程,然后全部屠杀掉。

    Private Sub Form1_FormClosed(sender As Object, e As FormClosedEventArgs) Handles MyBase.FormClosed
        s = Nothing
        '版权声明:   本文为CSDN博主「smmi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
        '原文链接:   https : //blog.csdn.net/smmi/article/details/84277610
        Dim i As Integer
        Dim proc As Process()
        '判断excel进程是否存在
        If System.Diagnostics.Process.GetProcessesByName("MBFMODIEEE").Length > 0 Then
            proc = Process.GetProcessesByName("MBFMODIEEE")
            '得到名为excel进程个数,全部关闭
            For i = 0 To proc.Length - 1
                proc(i).Kill()
            Next
        End If
        proc = Nothing
        '版权声明:   本文为CSDN博主「smmi」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
        '原文链接:   https : //blog.csdn.net/smmi/article/details/84277610
    End Sub

5. 编译 x86还是x64 ?

Activex EXE是外部进程,不是内部线程,它就是个独立的程序,因此,不论是x86编译,还是x64都是可以的。编译完成后,项目EXE文件夹中把所需的DLL考贝进去,打包时同时打进去。

VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用_第4张图片

 体会:

感觉Activex EXE方式比Activex DLL方式改造老旧更易用,因为灵活性更大一些。

VB.NET调用VB6 Activex EXE实现PowerBasic和FreeBasic的标准DLL调用_第5张图片

代码链接

https://download.csdn.net/download/weixin_45707491/88244920

你可能感兴趣的:(VB.NET,Activex,EXE)