关于OCX控件注册问题。

Jimmy_0220 2005-10-25 09:27:16
各位,我用VB写了一个OCX控件并打包成 .CAB在网页上调用。Server是Linux系统,Client是Windows系统(这是一个JAVA项目,我们开发人员都在Windows系统开发)。CAB应该可以自动注册,但现在我发现有的机器可以下载成功并注册使用,有的不行(所有拦截和屏蔽的都已去了,并且已把Server的IP设为安全站点)不能注册的Client下载的控件即(*.CAB包)不全,原大小是3M左右,下载下来的才几十K。

后来,我用我的机器做服务器,让别人访问我的系统,他们就能够下载成功,控件也可以使用。再让他们访问Server的系统该控件也可以正常使用了。我想了一下发现我的机器上已注册了这个控件,而Server是Linux没有注册控件的说法,而他们Client的系统也是Windows,而且没有注册我的控件,所以他们不能正常下载和使用。

最后我把自己机器上的控件也注销以后发现连我自己也不能使用了!请问VB的高手如何解决这个问题?CAB应该能自动注册,可我的不行是什么原因?我想到在控件里写一个注册函数,在控件下载的时候自动进行客户端的注册,但苦于对VB的API函数不熟找了很多资料也没能找到,LoadLiberary, GetProcAddress,DllRegisterServer,CallWindowProc等内部API函数我不知道如何使用,MSDN也找过Microsoft网站上也找过,都是C++的例子(我很久没有使用C了,对C++不熟)。而且这个方法我也不确定一定能解决,因为我们有些Client就不能下载完全。如何把OCX控件加载读入内存,并自动注册的函数希望高手给个例子(我不知道上面要使用的函数在VB里是如何调用的)我一直做JAVA开发,VB的API我一点也不懂,我的OCX控件也没有使用API。请高手指点指点!!!非常急!如有实际例子或代码也可以发Email给我:Jimmy_0220@126.com
...全文
427 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
sdenli 2006-01-08
  • 打赏
  • 举报
回复
我看到你的一个帖子有关打包的.我想问你一下.就是如何作打包程序可以让OCX控

件在安装过程中自动注册(用的是。NET的打包程序)
Jimmy_0220 2005-10-27
  • 打赏
  • 举报
回复
我使用了你的方法,控件还是不能注册是什么原因?急死我了!那里我学要改成自己控件的名称吗?
winehero 2005-10-27
  • 打赏
  • 举报
回复
COM对象的应用程序名称.类
Jimmy_0220 2005-10-27
  • 打赏
  • 举报
回复
TO: winehero(编程人生) 请问这句话If IsRegistered("MSFlexGridLib.MSFlexGrid.1") Then 中 MSFlexGridLib.MSFlexGrid.1是什么意思?
Jimmy_0220 2005-10-25
  • 打赏
  • 举报
回复
谢谢各位高手!!!我试一试!
xiaoMONKEY 2005-10-25
  • 打赏
  • 举报
回复
就是这样
winehero 2005-10-25
  • 打赏
  • 举报
回复
其中C:\name.dll是你的控件名(全路径),在此我仅仅以name.dll为例
winehero 2005-10-25
  • 打赏
  • 举报
回复
'有个API用来注册.ocx的
Declare Function RegComCtl32 Lib "C:\name.dll" _
Alias "DllRegisterServer" () As Long
Declare Function UnRegComCtl32 Lib "C:\name.dll" _
Alias "DllUnregisterServer" () As Long
Const ERROR_SUCCESS = &H0

'使用:
call RegComCtl32
If RegComCtl32 = ERROR_SUCCESS Then
MsgBox "注册成功!"
Else
MsgBox "注册失败!"
End If
winehero 2005-10-25
  • 打赏
  • 举报
回复
'使用Shell命令
Shell "regsvr32 /s """ & 文件全路径名 & """"

bbhere 2005-10-25
  • 打赏
  • 举报
回复
up
YuyuanJian 2005-10-25
  • 打赏
  • 举报
回复
UP
winehero 2005-10-25
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaxctrl/html/msdn_ctlreg.asp
或者是使用如下代码判断:

Option Explicit

public function IsRegistered(byval 控件名 as string) as boolean
'其中控件名:OCXLib.ControlName
dim oCheckup as object
' Check whether the activeX control ControlName is installed and registered.
Set oCheckup = CreateObject(控件名)
IsRegistered= (Err.Number = 0)
end function

Private Sub Command1_Click()
If IsRegistered("MSFlexGridLib.MSFlexGrid.1") Then
MsgBox "MSFlexgrid已注册"
Else
MsgBox "MSFlexgrid为注册"
End If

End Sub
Jimmy_0220 2005-10-25
  • 打赏
  • 举报
回复
TO: winehero(编程人生) 我有个问题,如何判断OCX控件已被注册过?如果以注册国的话就不需要再注册了。

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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