首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • VB调用VB.NET 写的DLL问题 急急急!! [已结贴,结贴人:kxjbj]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kxjbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 揭帖率:
    发表于:2007-11-13 15:03:12 楼主
    用NET创建DLL,代码如下

    Public Interface IDemo
        Function Test() As String
        Function ShowTime() As String
    End Interface

    Public 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 Function

    End 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.iDemo

    demo = New ClsDemo.demo
    iDemo = demo

    Dim str As String
    str = iDemo.Test
    MsgBox str

    End Sub

    为什么在
    demo = New ClsDemo.demo
    这句出现自动化错误的提示?
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • ZOU_SEAFARER
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-13 17:00:561楼 得分:0
    这个问题我也在寻找,搂住知道结果后不要忘记告诉我亚,给我发消息!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Tiger_Zhao
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 4

      3

      2

    发表于:2007-11-13 17:03:402楼 得分:0
    给Demo添加一个空白的New方法试试。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kxjbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-13 23:32:573楼 得分:0

    2楼,怎么添加空白NEW?

    我试过很多方法都不行,

    NET下怎么掉都可以。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Tiger_Zhao
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 4

      3

      2

    发表于:2007-11-14 08:53:384楼 得分:5
    VB.NET code
    '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
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • toury
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2007-11-14 10:28:225楼 得分:0
    是不是应该在.NET的[组件类]里写?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • alifriend
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-14 10:33:246楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • toury
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2007-11-14 11:05:277楼 得分:0
    5楼写错了;不好意思
    是不是应该在.NET的[COM 类]里写?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • Tiger_Zhao
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 4

      3

      2

    发表于:2007-11-14 11:16:318楼 得分:0
    具体还是请到MSDN上找找相关的文章,以前粗略看过但没有实践过,只有一个大致的印象。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • toury
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2007-11-14 11:43:369楼 得分:0
    做了测试,楼主恐怕是在VB.NET-->类库-->类 里写的这个DLL,这样不可以的,VB.NET主旨已经颠覆了VB6的COM思想,所以其普通的类不是VB6中的COM;
    但可以:
    添加新项-->COM 类;在这里写代码然后生成,.NET就自动导出了xxx.tlb并注册这个COM对象;
    在VB6里引用这个xxx.tbl;就OK了
    -------------------------------------------------------------------
    VB.NET code
    '(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:
    VBScript code
    '引用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


    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kxjbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-14 13:29:3910楼 得分:0
    感谢 Tiger_Zhao ,toury .我试试看,
    但是从网上 查询的,应用CCM ,应用代理访问NET下DLL 怎么不可以??很晕
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kxjbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-15 01:16:5211楼 得分:0
    谢谢toury ,问题解决,感谢ing.
    但是怎么不能给分呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • toury
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    • 2

    发表于:2007-11-15 08:34:5012楼 得分:15
    LZ兄弟别客气,大家互相交流,呵呵

    点左上的管理帖子就可以给分了;
    不过分不分的没什么所谓啦;倒是建议LZ给1楼一个短信,呵呵
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • kxjbj
    • 等级:
    • 可用分等级:
    • 总技术专家分:
    • 总技术专家分排名:
    发表于:2007-11-21 13:56:1913楼 得分:0
    好的,呵呵,谢谢.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved