用VB创建的COM+组件,在客户端安装,客户端程序调用后,没有返回值,通过在客户端的组件管理器观察,组件没有响应动作,组件调用方式,采用CREATEOBJECT方法和引用方法都试过,都不成功,请问哪位大侠遇到了这样的问题,有好的建议!

解决方案 »

  1.   

    是打包成*.msi文件安装吗?
    调用能不能成功??
    最好能详细,或者贴出代码!
      

  2.   

    To:online(龙卷风(学习.NET中...))
    谢谢你的关注,我是初次调用,不知道究竟如何操作,所以就使用如一般*.dll文件的使用方式,也使用了CREATEOBJECT("???.????")的方法,但都没有成,能不能给我一个例子作为参考,不胜感激,测试成功立即揭贴,谢谢!
      

  3.   

    To:online(龙卷风(学习.NET中...))
    我的确是打包成*.msi文件安装的
      

  4.   

    来个简单的例子吧~!算整数加法!(例子中间没有包含数据有效性的控制,测试时不要输入非整型数据)
    新建ACTIVE DLL工程,工程名COM_Test,类名clsAdd,类中粘贴代码:
    Option Explicit
    Public x, y As Integer
    Public Function myAdd() As Integer
    myAdd = x + y
    End Function
    编译得到COM_Test.dll,下面开始注册组件
    开始-设置-控制面板-组件服务,找到COM+应用程序,右键新建 应用程序,创建一个空应用程序,就叫myadd吧,然后右键新建组建,导入刚才生成的COM_Test.dll,成功以后点击myadd应用程序,将其导出,注意类型选代理,就会生成myadd.msi和myadd.msi.cab两个文件
    下面做一个测试程序.新建标准EXE工程,引用COM_TEST(就是刚才做的组件),窗体如下:
    VERSION 5.00
    Begin VB.Form Form1 
       Caption         =   "Form1"
       ClientHeight    =   3405
       ClientLeft      =   60
       ClientTop       =   345
       ClientWidth     =   5100
       LinkTopic       =   "Form1"
       ScaleHeight     =   3405
       ScaleWidth      =   5100
       StartUpPosition =   3  '窗口缺省
       Begin VB.CommandButton Command2 
          Caption         =   "Quit"
          Height          =   495
          Left            =   3600
          TabIndex        =   7
          Top             =   2520
          Width           =   1215
       End
       Begin VB.CommandButton Command1 
          Caption         =   "Add"
          Height          =   495
          Left            =   3600
          TabIndex        =   6
          Top             =   1800
          Width           =   1215
       End
       Begin VB.TextBox Text3 
          Height          =   375
          Left            =   1920
          TabIndex        =   4
          Top             =   1920
          Width           =   1215
       End
       Begin VB.TextBox Text2 
          Height          =   375
          Left            =   1920
          TabIndex        =   3
          Top             =   1200
          Width           =   1215
       End
       Begin VB.TextBox Text1 
          Height          =   375
          Left            =   1920
          TabIndex        =   2
          Top             =   480
          Width           =   1215
       End
       Begin VB.Label Label3 
          AutoSize        =   -1  'True
          Caption         =   "Result:"
          BeginProperty Font 
             Name            =   "宋体"
             Size            =   15.75
             Charset         =   134
             Weight          =   400
             Underline       =   0   'False
             Italic          =   0   'False
             Strikethrough   =   0   'False
          EndProperty
          Height          =   315
          Left            =   360
          TabIndex        =   5
          Top             =   1920
          Width           =   1155
       End
       Begin VB.Label Label2 
          AutoSize        =   -1  'True
          Caption         =   "Y:"
          BeginProperty Font 
             Name            =   "宋体"
             Size            =   15.75
             Charset         =   134
             Weight          =   400
             Underline       =   0   'False
             Italic          =   0   'False
             Strikethrough   =   0   'False
          EndProperty
          Height          =   315
          Left            =   480
          TabIndex        =   1
          Top             =   1200
          Width           =   330
       End
       Begin VB.Label Label1 
          AutoSize        =   -1  'True
          Caption         =   "X:"
          BeginProperty Font 
             Name            =   "宋体"
             Size            =   15.75
             Charset         =   134
             Weight          =   400
             Underline       =   0   'False
             Italic          =   0   'False
             Strikethrough   =   0   'False
          EndProperty
          Height          =   315
          Left            =   480
          TabIndex        =   0
          Top             =   480
          Width           =   330
       End
    End
    Attribute VB_Name = "Form1"
    Attribute VB_GlobalNameSpace = False
    Attribute VB_Creatable = False
    Attribute VB_PredeclaredId = True
    Attribute VB_Exposed = False
    Option Explicit
    Dim myAdd As New clsAddPrivate Sub Command1_Click()With myAdd
        .x = Val(Text1.Text)
        .y = Val(Text2.Text)
        Text3.Text = .myAdd
    End WithEnd SubPrivate Sub Command2_Click()
    Set myAdd = Nothing
    End
    End SubPrivate Sub Form_Load()
    Set myAdd = New clsAdd
    End Sub
    然后编译生成COM_CLIENT.EXE,将这个文件和刚才导出的两个文件复制到客户机上(WIN2000),
    在客户机上安装myadd.msi,再运行COM_CLIENT.EXE试试!
    注意在客户机登录的用户要有安装和访问服务器组件的权限!
      

  5.   

    补充一点:
    COM+是配置型组件,部署过程中要做不少配置和设置,包括权限,如果是在域中测试就很方便,否则要配置相应权限,要不然就会有权限错误等问题!~
      

  6.   

    to:billyqiao(如冰) 
    不知你解决了问题没有,这几天我也在研究COM+,有个问题一直在困扰着我,就是权限配置。我的客户端和服务器端都是WIN2000,只有当他们的User和PassWord一样时才能远程创建对象,否则提示为“运行时错误70,拒绝的权限”。这个该怎么办?
    并请求各位高手可以指点迷津。
      

  7.   

    楼上的。
    将客户端的(MS DTC)默认身份验证级改为“无”就可以解决这个问题。不过我没有想通为什么改的是客户端的身份验证而不是服务器端的。
      

  8.   

    to  titan1975(泰坦) :
    老兄,你在误导,哪有这么简单。
    首先,ACTIVE DLL工程必须设置为“远程服务器文件”,其次,在导入组件时队了COM_Test.dll外
    还要COM_Test.TLB(类型库)