如何注册这个控件?(高分求助)

Dermao 2002-09-30 11:30:18
我在BCB下做一个串口通信的程序,发现BCB下没有串口控件,就从VC下install了一个MSComm的Active控件,编译使用都没问题,可在打包后拿到别的机子上总提示该控件不能在RunTime时使用,就无法运行,我糊涂了 ,我又试了一下,把VC包中的Active选项单装一下就OK,我不知这个问题如何解决,向各位请教。
...全文
84 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbxtx 2002-09-30
  • 打赏
  • 举报
回复
串口控件多的是,换个别的吧。
albert 2002-09-30
  • 打赏
  • 举报
回复
参考以下VB的例子(注册控件用regsvr32.exe):

一、概 述
---- 在实际工程应用中,有时需要在程序运行时动态加载ActiveX控件,以满足不同的应用条件或用户输入,因此有必要研究动态加载ActiveX控件的实现方法。
----一个控件要在Windows中使用,必须将其在Windows中注册。注册ActiveX控件一般来说有三种途径:1.使用Regsvr32.exe程序对ActiveX控件进行注册;2.使用安装程序进行注册; 3.利用Windows API 函数进行注册。

----为了保护控件不被非法用户使用,VB提供了加许可证(License)功能。当生成控件时选择了加许可证选项,生成的控件会含有许可证码(包含在.vbl文件中)。当向其他机器安装该控件时,该许可证码会自动安装在该机器的注册表中,而如果仅复制控件到该机器并注册它,则复制机器注册表中没有控件的许可证码,控件不可使用。

二、实现方法
----以下是不同情况下动态加载控件的实现方法。
----1.控件在应用程序的窗体(Form)上

----这种情况适合于应用程序中需要该控件,但需要控件实例的具体数量不定。实现方法是首先从工具箱中拖动需要的控件到窗体上;然后将控件的 index属性设为0(生成一个控件实例数组);最后编程实现控件实例的加载卸载。

Dim iControlIndex As Integer
‘加载控件实例的索引值
Private Sub LoadControl(iIndex As Integer)
Load UserControl11(iIndex)
‘加载控件实例,UserControl11是自定义控件名字
UserControl11(iIndex).Visible = True
End Sub
Private Sub UnloadContr(iIndex As Integer)
Unload UserControl11(2)
‘卸载控件实例,当不使用控件实例时自动卸载
End Sub
Private Sub UserControl11_Done(Index As Integer)
‘根据控件实例的索引决定相应控件实例作出响应
Select Case Index
Case 0
Case 1
......
End Sub

----2.控件在应用程序工具箱(TOOLBOX)中,但没有添加到应用程序中

----这种情况适合于为了完成不同的任务,制作了多个不同功能的控件,在特定条件下只需要一个或几个控件即可。实现方法是将所有可能用到的控件加到VB工具箱中,当应用程序执行时,根据需要由程序自动加载控件。
Dim WithEvents oControl As VBControlExtender

---- 动态加载控件虽然实现了控件的动态加载,但不能预先设计加载控件的响应事件代码,如:预先设计处理事件代码Sub sZlfPrinr1_Click() 将是非法的,当然,可以将要响应的事件封装在控件内部,但这样降低了控件的灵活性。

---- WithEvents 关键词使VBControlExtender控件实例能提供事件捕捉陷井,VBControlExtender对象对动态添加控件特别有用,它提供了一套通用的属性、方法、事件给开发人员。

Private Sub LoadControl() ‘加载控件
If Not oControl Is Nothing Then
‘首先判断控件是否存在,若存在则先卸载
Controls.Remove (“szlfPrint1") ‘卸载控件实例
End If
Licenses.Add “test.usercontrol1",
“9CA5E0CC-37D7-11D4-
8547-00A024EE55CD =
uohhlohhhhmoooiouijoohloririmhlhtoqi"
‘如果控件需要许可证码,则需先填加许可证码
Set oControl = Me.Controls.Add(
“test.usercontrol1",“szlfPrint1", Frame1)
‘test.usercontrol是控件的对象编号,
可通过VB的Object Browser得到控件的对象编号,
szlfPrint1是控件的名字,Frame1是控件的容器。
oControl.Visible = True
End Sub
Private Sub UnloadControl() ‘卸载控件实例
If Not oControl Is Nothing Then
Controls.Remove (“szlfprint1")
Set oControl = Nothing
End If
End Sub
Private Sub CmdTest_Click()
‘测试程序,可以像静态加载控件
那样使用控件实例的属性及方法
oControl.Visible = False
oControl.DoMsg
oControl.NodeCode = “dd"
End Sub
Private Sub oControl_ObjectEvent(Info As EventInfo)
Select Case Info.Name
Case “MouseDown"
oControl.DoMsg
Case “click"
MsgBox “Click"
‘双击处理代码
Case Else ‘
End Select
End Sub

----ObjectEvent(Info As EventInfo)能捕捉到控件使用 RaiseEvent产生的所有事件,EventInfo数据结构映射了事件的名称、参数个数和参数的值。

---- 值得注意的是,由于控件在工具箱中而没有在应用程序中,当程序运行时会报错,需把程序的工程属性Remove information about unused Activex Controls 设为不选。

----3.控件在应用程序运行机器上,但没有在工具箱中

----这种情况适合于在较大工程项目中,开发者彼此分工合作,控件由第三方提供,制作应用程序的开发者没有此控件,但要安装的机器有这个控件。

----这种情况的实现方法与情况2类似,并可以实现控件的动态注册及撤消注册,但应用程序无法访问控件的方法及部分属性。

Private Sub RegisterControl_Click
(strControlName As String) ‘注册控件
‘Syspath是regsvr32的目录;
strControlName是控件名字(包括路径)
i=Shell(Syspath & “regsvr32.exe /s /I"
& strControlName, vbHide)
End Sub
Private Sub UnRegisterControl_Click
(strControlName As String) ‘撤消注册控件
i=Shell(Syspath & “regsvr32.exe /s /U"
& strControlName, vbHide)
End Sub End Sub

耙子 2002-09-30
  • 打赏
  • 举报
回复
在注册表中HKEY_CLASS_ROOT\Licenses\下添加项:
4250E830-6AC2-11cf-8AD8-00AA00C00905
值为:
"kjljvjjjoquqmjjjvpqqkqmqykypoqjquoun"
耙子 2002-09-30
  • 打赏
  • 举报
回复
MSComm 有个注册的文件,如果安装了vb或者vc就能注册了。
如果你单独用这个mscomm.ocx开发,那么把这个注册文件倒入注册表就行了。

搜索bcb和delphi坛子关于 mscomm的帖子,有这个注册文件的内容提供。

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧