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 那个文件,在项目管理器的依赖项中会显示出类的名称。
2. 有了COM依赖项,Imports 引用就和 Activex DLL一样了,之后建接口也是一样的。
3. ActiveX EXE的加载
因为Activex EXE是外部程序,使用时必须先加载,不然Imports和new接口没办法工作。想了想就在创建应用时,在它的new里装入吧。
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考贝进去,打包时同时打进去。
体会:
感觉Activex EXE方式比Activex DLL方式改造老旧更易用,因为灵活性更大一些。
代码链接
https://download.csdn.net/download/weixin_45707491/88244920