用NET创建DLL,代码如下
 
Public Interface IDemo
    Function Test() As String
    Function ShowTime() As String
End InterfacePublic Class Demo
    Implements IDemo    Public Function Test() As String Implements IDemo.Test
        Test = "Hello World!"
    End Function    Public Function ShowTime() As String Implements IDemo.ShowTime
        Dim str As String
        str = Now.ToString
        Return str
    End FunctionEnd Class
编译出Demo.dll组件 使用.net的工具 Visual Studio .Net 2003 Command Prompt,输入以下命令 
Regasm Demo.dll /tlb:Demo.tlb 
把Demo.dll注册为一个com对象(这个com对象不等同于普通的用VB编写的Com对象),并导出类型库Demo.tlb 
将程序集添加到全局程序集缓存中
gacutil /I Demo.dll完成后,应用VB调用,代码如下,Private Sub Command1_Click()Dim demo As ClsDemo.demo
Dim iDemo As ClsDemo.iDemodemo = New ClsDemo.demo
iDemo = demoDim str As String
str = iDemo.Test
MsgBox strEnd Sub为什么在 
demo = New ClsDemo.demo
这句出现自动化错误的提示?

解决方案 »

  1.   

    给Demo添加一个空白的New方法试试。
      

  2.   


    2楼,怎么添加空白NEW?我试过很多方法都不行,NET下怎么掉都可以。
      

  3.   

    '1、.Net创建对象会调用默认的构造函数New,VB6肯定不会,添加New函数试试
    Public Class Demo
        Public Sub New()
        End Sub
    End Class'2.调用CreateInstance新建对象
    Public Class Demo
        Public Shared Function CreateInstance() As Demo
            Return New Demo
        End Function
    End Class
      

  4.   

    是不是应该在.NET的[组件类]里写?
      

  5.   

    5楼写错了;不好意思
    是不是应该在.NET的[COM 类]里写?
      

  6.   

    具体还是请到MSDN上找找相关的文章,以前粗略看过但没有实践过,只有一个大致的印象。
      

  7.   

    做了测试,楼主恐怕是在VB.NET-->类库-->类 里写的这个DLL,这样不可以的,VB.NET主旨已经颠覆了VB6的COM思想,所以其普通的类不是VB6中的COM;
    但可以:
    添加新项-->COM 类;在这里写代码然后生成,.NET就自动导出了xxx.tlb并注册这个COM对象;
    在VB6里引用这个xxx.tbl;就OK了
    -------------------------------------------------------------------'(1)VB.NET-->类库-->类-->确定
    '(2)删除class1
    '(3)添加新项-->COM 类
    '命名comclass1-->myhello.vb
    '<ComClass(myhello.ClassId, myhello.InterfaceId, myhello.EventsId)> _
    Public Class myhello#Region "COM GUIDs"
      ' 这些 GUID 提供该类的 COM 标识及其 COM 接口。
      ' 如果您更改它们,现有的客户端将再也无法
      ' 访问该类。
      Public Const ClassId As String = "B630F166-0717-4104-A9E0-FB30F0232490"
      Public Const InterfaceId As String = "2EF3C811-B545-4D54-BDA9-A50E84FB56BC"
      Public Const EventsId As String = "85978B3B-BD76-4602-A7A8-E906746BD04D"
    #End Region  ' 可创建的 COM 类必须具有不带参数的 
      ' Public Sub New(),否则,该类将不会注册到 COM 注册表中,
      ' 而且不能通过 CreateObject 
      ' 来创建。
      Public Sub New()
        MyBase.New()
      End Sub
      Public Function SayHello() As String
        SayHello = "Hello Word!"
      End Function
    End Class'(4)生成demo
    '(5)使用.net的工具   Visual   Studio   .Net   2003   Command   Prompt,输入以下命令   
    '     Regasm   Demo.dll(注意路径)   /tlb:Demo.tlb(注意路径)----------------------------------
    VB6:'引用Demo.tlb
    Private Sub Form_Load()
      Dim objHello As New demo.myhello
      Dim msg$
      
      msg = objHello.SayHello()
      MsgBox msg, 64, "应用.NET DLL"  Set objHello = Nothing
    End Sub
      

  8.   

    感谢 Tiger_Zhao ,toury .我试试看,
    但是从网上 查询的,应用CCM ,应用代理访问NET下DLL 怎么不可以??很晕 
      

  9.   

    谢谢toury ,问题解决,感谢ing.
    但是怎么不能给分呢?
      

  10.   

    LZ兄弟别客气,大家互相交流,呵呵点左上的管理帖子就可以给分了;
    不过分不分的没什么所谓啦;倒是建议LZ给1楼一个短信,呵呵