在VB中我做了一个控件,在自已的机器上编译成ocx控件,做项目通过,可当我把项目做好发布的时候问是就来了!
一是:  我把原程序copy 到别的装有VB机器上时,运行提示我做的那个控件没注册非得重新编译怎样才能解决(也就是想做成直接copy到c:/winnt/system32就可以运行的那种控件)?
二是:  我怎样才能把我的项目打包成安装程序(里面包括一个Access2000的数据库;两个第三方控件以.ocx结束,直接copy到c:/winnt/system32就可以运行的那种控件;还有就是上面我说的自已的控件了)?

解决方案 »

  1.   

    请楼上的兄弟说清楚一点儿, regsvr32是什么?在哪里可以找到?
      

  2.   

    晕~
    regsvr32是windows提供的注册组件的程序,在系统目录下,一般这个目录在PATH里面
    所以你只要在cmd窗口中直接运行regsvr32 <filename>就行啦~写在批处理里面也是可以的哦~
      

  3.   

    用InstallShiled或Setup Factory或Setup Build都可以做这些东西,很方便的
      

  4.   

    你如果要自动注册,请看:
    VB编程动态注册ActiveX控件
        在使用VB和其它一些Win9X下的编程软件,就要同ActiveX控件打交道,注册
    和反注册控件是一件令人很头疼的事情。有时从网上下载了一个控件,但是在使用
    时VB总是提示控件没有注册。又或者想删除一个控件却无法从注册中抹去。
        实际上,每一个ActiveX控件都有两个输出函数:DllRegisterServer和
    DllUnRegisterServer。顾名思义,通过这两个函数就可以注册和反注册控件了,
    下面通过程序说明如何通过编程来注册。
        首先在Form中加入两个CommandButton,不要改变它们的属性。然后在Form中
    加入如下代码:
    Private Declare Function RegComCtl32 Lib "ComCtl32.OCX" _
            Alias "DllRegisterServer" () As Long
    Private Declare Function UnRegComCtl32 Lib "ComCtl32.OCX" _
            Alias "DllUnregisterServer" () As Long
    Private Declare Function FormatMessage Lib "kernel32" _
            Alias "FormatMessageA" (ByVal dwFlags As Long, _
            lpSource As Any, ByVal dwMessageId As Long, _
            ByVal dwLanguageId As Long, ByVal lpBuffer _
            As String, ByVal nSize As Long, Arguments As _
            Long) As Long
    Private Declare Function GetLastError Lib "kernel32" () As LongConst ERROR_SUCCESS = &H0Private Sub Command1_Click()
        Dim astr As String
        
        '反注册ComCtl32.Ocx
        If RegComCtl32 = ERROR_SUCCESS Then
            MsgBox "注册成功"
        Else
            astr = String$(256, 20)
            FormatMessage FORMAT_MESSAGE_FROM_SYSTEM Or _
                FORMAT_MESSAGE_IGNORE_INSERTS, 0&, GetLastError, _
                0&, astr, Len(astr), ByVal 0
            MsgBox astr
        End If
    End SubPrivate Sub Command2_Click()
        Dim astr As String    '反注册ComCtl32.Ocx    
        If UnRegComCtl32 = ERROR_SUCCESS Then
            MsgBox "反注册成功"
        Else
            astr = String$(256, 20)
            FormatMessage FORMAT_MESSAGE_FROM_SYSTEM Or _
                FORMAT_MESSAGE_IGNORE_INSERTS, 0&, GetLastError, _
                0&, astr, Len(astr), ByVal 0
            MsgBox astr
        End If
    End Sub
        运行程序,点击Command2反注册ComCtl32.Ocx控件,在VB菜单中选 Project|components
    或按Ctrl+T,在控件列表框中可以看到已经没有ComCtl32.Ocx了。再运行程序,点击Command1
    重新注册控件。
        以上程序再VB5,WIN95下运行通过。
      

  5.   

    如果实在跟随网页一起发布呢,在网页中设置classid和相关的参数即可
      

  6.   

    这一类问题一般都不关注不注册的事,本人也遇到过相似的问题,解决方法如下.1.你的控件中可能使用了具体类型,如果是,请重新定义成  Object 或 Variant.
    2.如果在OCX有自定义类型等,请将它放到一个类模块中去.
      

  7.   

    用regsvr32""加上你的文件的路径就可以了。
      

  8.   

    不关注不注册的事.是你的OCX本身设计就有问题.
    第一.你用DIM 声明了非VB 标准EXE控件或事件.
    第二.在函数参数中也可能使用了非VB标准EXE控件或事件.解决办法:
    1.将针对某种类型的控件事件定义成通用事件.如下:
    Private WithEvents Ev_GridObj As VBControlExtender2.然后用通用事件接口处理.
    Private Sub Ev_GridObj_ObjectEvent(Info As EventInfo)
            Select Case UCase$(Info.Name)
                   Case UCase$("MouseDown")
                        Call GridMouseDown
                   Case UCase$("Scroll")
                        Call GridScroll
                   Case UCase$("GotFocus")               Case UCase$("MouseUp")
                        
                   Case UCase$("LeaveCell") 
                        
                   Case UCase$("EnterCell") 
                        
                   Case UCase$("RowColChange") 
                        
            End Select
    End Sub3.将所有函数中使用 控件或目标 作参数的定义为:
    Object 或 Variant 或 Control ,一句话,就是不能定义为具体的控件类型.
      

  9.   


    ObjectEvent 事件当一个被指定给 VBControlExtender 对象变量的控件引发一个事件时发生。语法Private Sub object_ObjectEvent(Info As EventInfo)ObjectEvent 事件语法有这些部分:部分 描述 
    object 必需的。一个对象表达式,其值是“应用于”列表中的一个对象。 
    Info 返回一个对 EventInfo 对象的引用。 
    说明ObjectEvent 事件是一个通用事件,允许您通过该控件的事件参数处理一个控件的事件和返回值。可以利用 ObjectEvent 事件来捕获一个控件产生的通用事件,保证您部署的任何控件包含部署应用程序所要求的某些基本功能。