主程序AppProject.EXE代码:
窗体frmMain代码:Option ExplicitPrivate Sub cmdOpt_Click()
    objAppObject.CreateAppObject ("AppTest.DerivedObject")
End Sub模块mdlMain代码:Option ExplicitPublic objAppObject As ObjectSub Main()
    Set objAppObject = New AppObject
    Load frmMain
    frmMain.Show
End Sub类AppObject代码:Option ExplicitPublic Function HelloWorld() As String
    HelloWorld = "Hello World"
End Function
Public Function CreateAppObject(ByVal strAppObj As String)
    Dim objCreate As Object
    Dim x As Object
    Set x = objAppObject
    Set objCreate = CreateObject(strAppObj)
    objCreate.DerivedObject x
    Set objCreate = Nothing
End Function
封装了窗体的DLL(AppTest.DLL)代码:
模块mdlMain代码:Option ExplicitPublic objMyApp As Object
类DerivedObject代码:Option ExplicitPublic Function DerivedObject(ByRef objApp As Object)
    Dim objFrm As Object
    Set objMyApp = objApp
    
    Set objFrm = New frmMain
    objFrm.Caption = objApp.HelloWorld
    objFrm.txtWord = "Hello World!"
    objFrm.Show
End Function
这种结构编译完成之后运行肯定是没有问题的,请问这种结构的程序如何在IDE下调试DLL?
编译主程序EXE后,调试DLL的时候提示:
“属性或方法调用不能包含私有对象的引用,不论是作为参数还是作为返回值”。
请赐教。
这种模式有一个极大的好处,编译完成一个主程序之后,其他部分可以交给他人完成而互不干扰,只要相互之间约定一个接口的方法即可。公用的方法、属性,全部通过主程序来传递。

解决方案 »

  1.   

    DerivedObject究竟是类名还是函数名?代码可能出在这个地方。
      

  2.   

    Dll 工程 AppTest 先运行起来,工程属性 Debugging 中选 Wait for components to be created。
    然后将 Exe 工程运行起来。
      

  3.   

    Private Sub cmdOpt_Click()
        objAppObject.CreateAppObject ("HiTest.clsObject")
    End Sub这一行代码出错:
    属性或方法调用不能包含私有对象的引用,不论是作为参数还是作为返回值。我想要的结果是能运行主程序AppProject.EXE来调试DLL
      

  4.   


     Dim obj As Object
        Set obj = CreateObject("HiTest.clsObject")
         obj.DerivedObject(****) 
      

  5.   

    调试DLL的方法
    方法一:将DLL工程和应用程序,建立一工程组,此时的调试方法与一般的应用程序用。   
    方法二:在应用程序外调试。同时打开应用程序和DLL工程,在DLL工程的project菜单中的project property选项的debugger中,设置调用此DLL的EXE文件。并在DLL中设置断点,启用EXE即可进行调试了
      

  6.   

    Set objFrm = New frmMain
    你这个dll编译没有问题吗?
      

  7.   


    都没有问题
    主程序和DLL程序都编译之后可以正常运行。
      

  8.   

    私有的 AppObject 不能被外部调用。Exe 工程类型更改为 ActiveX Exe,类 AppObject 的属性要设为非 Private 的。
      

  9.   


    你注意我列出的代码了吗?我编译这里不能通过,你的dll里加窗体了?
      

  10.   


    原来如此,我的主程序用的标准Exe
      

  11.   


    嗯,我封装了窗体在DLL里面。
    我的想法,是做一个主程序,在主程序里面提供很多公用的方法,比如数据连接,数据处理这些,
    然后团队里面的人可以分别开发自己的DLL,通过一个公用的接口,能互相调用。
    最后,只要把这些DLL和主程序一起打包就可以发布了。