我的程序中是一个VBG,里面包含很多个VBP,如附图中的:A:MainExecPp(TopPpExeProject.vbp)
B:TopPpExecDll(TopPpExecProject.vbp)---> 这是一个dll
D:TopPpfanucDll(topppfanucProject.vbp)--->这是一个dll
E:toppfanucE264Dll(topppfanucE264Project.vbp)--->这是一个dll我主要的工作是在E:toppfanucE264Dll(topppfanucE264Project.vbp) 下面的类模块中topppfanucE264(topppfanucE264.cls)中写代码做一些二次开发。
现在我遇到一个问题:由于工作的需要,我在类模块topppfanucE264(topppfanucE264.cls)中加了注册机代码:如果未注册就终止程序,本来我用END语句,结果VB报错说“dll模块不支持此功能”。所以我就想用其它方法来卸载主窗口FormMain(附图中C处),可是问题又来了:怎么在类模块F:topppfanucE264(topppfanucE264.cls)中调用B:TopPpExecDll(TopPpExecProject.vbp)中窗口FormMain然后将其卸载呢?各位高手有这方面经验的请指导一下。小弟先谢过。

解决方案 »

  1.   

    你那几个 dll ,应该都是ActiveX DLL的吧!
    这ActiveX DLL至少有一个 “公共类”的,你把这个操作窗口的“接口”做在相应的类中,
     用它的Public Sub 或 Function 来“中转一下”,就能很方便的操作DLL中的窗口了。
      

  2.   

    版大说的是对的,我的F:topppfanucE264(topppfanucE264.cls)是被引用的,难道不能通过一些方法操作B:TopPpExecDll(TopPpExecProject.vbp) 中的FormMain窗口吗?如果不行的话,那我该怎么在F:topppfanucE264(topppfanucE264.cls)中写什么代码让我的程序运行终止呢。
    请版大给点思路……
      

  3.   

    将窗口作为实例传进来。
    1:尝试着将FormMain 导入TopPpExec.cls:Private WithEvents oFormMain As FormMain2:然后在TopPpExec.clsZ中用:
    Public Sub moCancel()
    Set oFormMain = new FormMain
    Unload oFormMain
    END SUB 3:在TopPpfanucE264中引用 moCancel() ,结果FormMain还是没能卸载。此时FormMain是冻结状态。我想还有其它我没处理对的地方吧。改天我整理下把源码发上来。