无法创建 ActiveX 组件怎么解决

weisai 2020-04-21 09:55:33
有一个dll, 在安装第三方软件(用VB6.0做的)之后,本机就有了。

使用VB6.0 ,通过添加引用,就可以直接new其中对象了(dll中包含了许多对象)。
不引用的情况下,在VB6.0 可以CreateObject。

问题:
1、这个dll,包含了许多对象类型,文档介绍说这个dll是一个动态链接库,动态链接库 和 DCOM/COM+是一个东西吗?
2、在VB.NET ,winform程序也可以直接 CreateObject。但是如果在.net环境 ,在web service中使用 ,CreateObject其中的对象,会提示无法创建 ActiveX 组件。
之前发过贴 https://bbs.csdn.net/topics/396438466
我按这份方法https://blog.csdn.net/milaoshu1020/article/details/104093137。 我找到了CLSID,在注册表中, 根据CLSID也找到了对象的名称。但是在 DCOM/COM+中找不到对应的组件可以放开权限。这个有什么解决思路。

谢谢
...全文
3578 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
milaoshu1020 2020-04-27
  • 打赏
  • 举报
回复
在aspx页面头部加上<%@ Page aspcompat=true %>才可以成功createobject你那个类的对象;
weisai 2020-04-27
  • 打赏
  • 举报
回复
引用 24 楼 milaoshu1020 的回复:
[quote=引用 23 楼 weisai 的回复:] Private Sub Command1_Click() Dim a As KFO.Vector Set a = New KFO.Vector MsgBox (a.Size) End Sub 我改成这样写,在没有安装ERP上运行也没有问题。
你机器上运行没问题不代表我机器上运行没问题; 不过这个不是重点; 重点是你现在是否可以在VB.NET中成功使用CreateObject("KFO.Vector")了?[/quote] winform程序没有问题。 web 程序报无法创建 ActiveX 组件
milaoshu1020 2020-04-27
  • 打赏
  • 举报
回复
引用 23 楼 weisai 的回复:
Private Sub Command1_Click() Dim a As KFO.Vector Set a = New KFO.Vector MsgBox (a.Size) End Sub 我改成这样写,在没有安装ERP上运行也没有问题。
你机器上运行没问题不代表我机器上运行没问题; 不过这个不是重点; 重点是你现在是否可以在VB.NET中成功使用CreateObject("KFO.Vector")了?
weisai 2020-04-27
  • 打赏
  • 举报
回复
引用 22 楼 milaoshu1020 的回复:
[quote=引用 18 楼 weisai 的回复:] 我又试了一下,在VB6.0 ,添加引用。然后这样写。没有安装ERP的可以正常运行 Private Sub Command1_Click() Dim a As New KFO.Vector MsgBox (a.Size) End Sub
VB6中使用As New声明的变量仅在调用方法或者属性的时候才创建对象; 你可以改成这样试试:

Private Sub Command1_Click()
Dim a As KFO.Vector
Set a = New KFO.Vector
MsgBox (a.Size)
End Sub
[/quote] Private Sub Command1_Click() Dim a As KFO.Vector Set a = New KFO.Vector MsgBox (a.Size) End Sub 我改成这样写,在没有安装ERP上运行也没有问题。
milaoshu1020 2020-04-26
  • 打赏
  • 举报
回复
看了一下,这个类创建的话需要许可证:
milaoshu1020 2020-04-26
  • 打赏
  • 举报
回复
我用vbs脚本创建对象: CreateObject("KFO.Vector") 提示这个怎么办:
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 12 楼 milaoshu1020 的回复:
邮箱地址已私信你,把dll发给我吧; 或者把文件上传到百度网盘,点击共享,把共享代码贴在这里也可以;
已经发你的邮箱了,谢谢。
milaoshu1020 2020-04-26
  • 打赏
  • 举报
回复
邮箱地址已私信你,把dll发给我吧; 或者把文件上传到百度网盘,点击共享,把共享代码贴在这里也可以;
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 8 楼 milaoshu1020 的回复:
我试了一下,VB6做的类在DCOM组件设置中就是显示为CLSID的,你可以找找有没有; 实在不行我教你...咱们用向日葵;
KFO.Vector 在注册表,有另外一个单独的CLSID。但是组件服务统一找不到
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 8 楼 milaoshu1020 的回复:
我试了一下,VB6做的类在DCOM组件设置中就是显示为CLSID的,你可以找找有没有; 实在不行我教你...咱们用向日葵;
关于KFO的介绍,在这里 https://wenku.baidu.com/view/2f8c5e4de518964bcf847c6b.html
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 8 楼 milaoshu1020 的回复:
我试了一下,VB6做的类在DCOM组件设置中就是显示为CLSID的,你可以找找有没有; 实在不行我教你...咱们用向日葵;
感谢你。 我上面说的第三方软件是金蝶的ERP系统,老系统,底层都是用VB6.0做的。 安装完之后,本身就在组件服务中注册了一些以KD开头的组件,是否存在CLSID的组件现在还不知道。 上面说的在web service 创建 Vector提示无法创建 ActiveX,我是这样写的: CreateObject("KFO.Vector") 这个写法在VB6.0 和VB.NET是可以创建对象的。 而KFO,对应的dll ,是 kfo10.dll 。我把这个组件放到没有安装金蝶ERP的PC,regsvr32 注册成功后。在注册表 能查Kingdee Foundation Objects, CLSID 是 BD29F730-5BDA-11D1-9C2A-127658000000。和我本机的CLSID 一样。在这台PC,组件服务没有找到BD29F730-5BDA-11D1-9C2A-127658000000 这个组件。 注册表里有的,是否组件服务一定会有吗? 方便的话,留个邮箱,我可以把 kfo10.dll 发给你,你本机可以注册和看能否找到。
milaoshu1020 2020-04-26
  • 打赏
  • 举报
回复
引用 18 楼 weisai 的回复:
我又试了一下,在VB6.0 ,添加引用。然后这样写。没有安装ERP的可以正常运行 Private Sub Command1_Click() Dim a As New KFO.Vector MsgBox (a.Size) End Sub
VB6中使用As New声明的变量仅在调用方法或者属性的时候才创建对象; 你可以改成这样试试:

Private Sub Command1_Click()
Dim a As KFO.Vector
Set a = New KFO.Vector
MsgBox (a.Size)
End Sub
milaoshu1020 2020-04-26
  • 打赏
  • 举报
回复
我没用过你的插件web service,但是我可以在.net类库中找得到相关的类和对象: 另外,"无法创建组件"KFO.Vector". 仅可在带有<%@ Page aspcompat=true %>页指令的页上创建单元线程组件." --- 这句话不是已经说的很清楚了吗,要在aspx页面头部加上<%@ Page aspcompat=true %>才可以成功createobject你那个类的对象;
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 19 楼 milaoshu1020 的回复:
可以用server.createobject代替createobject,真的管用; 我这里出现的错误仍然是权限错误,你可以自己试试; 参考资料: https://stackoverflow.com/questions/27615726/classic-asp-error-800a01ad-activex-component-cant-create-object
我最终目的是插件web service <WebMethod()> _ Public Function HelloWorld() As String CreateObject("KFO.Vector") Return "Hello World" End Function 无法创建组件“KFO.Vector”。仅可在带有 <%@ Page aspcompat=true %> 页指令的页上创建单元线程组件。
milaoshu1020 2020-04-26
  • 打赏
  • 举报
回复
可以用server.createobject代替createobject,真的管用; 我这里出现的错误仍然是权限错误,你可以自己试试; 参考资料: https://stackoverflow.com/questions/27615726/classic-asp-error-800a01ad-activex-component-cant-create-object
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 15 楼 milaoshu1020 的回复:
看了一下,这个类创建的话需要许可证:
我又试了一下,在VB6.0 ,添加引用。然后这样写。没有安装ERP的可以正常运行 Private Sub Command1_Click() Dim a As New KFO.Vector MsgBox (a.Size) End Sub
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 14 楼 milaoshu1020 的回复:
我用vbs脚本创建对象: CreateObject("KFO.Vector") 提示这个怎么办:
是不行,我再今天早上那台PC上试过,我用VB做的exe程序,我本机正常。到他的PC,提示无法创建activeX 组件。 你本机组成了这个dll ,你看看你注册表应该有 Kingdee Foundation Objects和 KFO.Vector 吧
weisai 2020-04-26
  • 打赏
  • 举报
回复
引用 14 楼 milaoshu1020 的回复:
我用vbs脚本创建对象: CreateObject("KFO.Vector") 提示这个怎么办:
你用的是脚本? VBScrip? 我直接是使用VB6.0 插件一个标准exe ,正常的啊。 除非正式客户,我们都没有许可证的。 Private Sub Command1_Click() Dim a As Object Set a = CreateObject("KFO.Vector") End Sub
weisai 2020-04-24
  • 打赏
  • 举报
回复
引用 5 楼 vansoft 的回复:
在web service中使用 ,CreateObject其中的对象,会提示无法创建 ActiveX 组件。 应该是权限问题,本人在.net的WebService中创建VB6写的ActiveDLL组件没有问题。
如果VB6写的ActiveDLL,其中没有再调用第三方组件,调用是没问题的。第三方组件,文档介绍是用VB6.0 做出的动态链接库。 VB6.0 或者VB.NET 使用winform程序CreateObject 这个第三方组件没问题。web service 就提示错误。 在组件服务找不到这个组件(已经知道CLSID)添加权限
weisai 2020-04-24
  • 打赏
  • 举报
回复
引用 3 楼 milaoshu1020 的回复:
都没有就找这个: {09AFE6F7-5BDB-11d1-9C2A-127658000000} 一样起作用;
这个是安装第三方软件(用VB6.0做的)后,才能在注册表找到。 列表显示的,后面的几十个名称和CLSID一样的,可以这样查。 但是前面的几十个是有单独名称的(比如 Excel),和CLSID不一样的,而且列表只能按名称排序。不能按CLSID排序。 第三方软件有文档介绍这个组件(用VB6.0做的),说是他动态链接库,动态链接库都在组件服务中能找到吗? 提示不能创建 ActiveX 组件 的ABC.Vector, 在第三方软件安装目录,有ABC10.dll ,Vector 是其中的一个对象。文档介绍这个组件全名叫 Axxx Bxxx Cxxxx 在注册表,是可以找到Axxx Bxxx Cxxxx 和 CLSID,但是在组件服务,找不到ABC或者Axxx Bxxx Cxxxx,也找不到 ABC.Vector
加载更多回复(6)

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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