COM 控件打cab包以及页面引用COM控件的有关问题
COM 控件打cab包以及页面引用COM控件的问题。
我用ATL创建了一个COM控件工程,含有3个ATL对象,相应的有3个Interface 和对应的3个coclass实现类。
每个coclass都有对应的一个uuid, 具体代码如下
我把生成的com控件打成cab,inf文件中涉及到CLSID的地方该怎么写?
我是这么写的,不知道对不对
在cmd中通过makecab这个指令我得到了cab包,名字是:usb.cab
然后我在页面中去引用这个com控件。引用代码是这样写的:
我js中调用usb这个控件中的方法,提示我 调用控件方法失败!Automation服务器不能创建对象。
提示这个错误应该是控件没有注册成功。
我在cmd命令中手动注册这个控件 "regsvr32 usb.dll" ,在js中调用控件中的方法就会成功!
请问是我上面哪个地方错了,应该如何改正。
------解决方案--------------------
如果控件能够通过手工注册,那么问题不是出在控件本身,而很可能出现在cab包中了,如果实在找不到解决的办法就在页面上直接引用或者可以参照下支付宝写inf方式试下吧。不清楚你是如何打cab包的
------解决方案--------------------
你的html 部分代码写错了。只需要执行
我用ATL创建了一个COM控件工程,含有3个ATL对象,相应的有3个Interface 和对应的3个coclass实现类。
每个coclass都有对应的一个uuid, 具体代码如下
- C/C++ code
library xxxxLib { importlib("stdole32.tlb"); importlib("stdole2.tlb"); [ uuid(00B2D278-D91C-4FCB-9DD7-7D8905DD91D6), helpstring("Operate Class") ] coclass Operate { [default] interface IOperate; }; [ uuid(FEE7C61D-4499-4557-AA77-39B9B44BC63A), helpstring("DeviceInfo Class") ] coclass DeviceInfo { [default] interface IDeviceInfo; }; [ uuid(1E017F5F-B253-4F44-9DFC-B03890A2F5E5), helpstring("Time Class") ] coclass Time { [default] interface ITime; }; }
我把生成的com控件打成cab,inf文件中涉及到CLSID的地方该怎么写?
我是这么写的,不知道对不对
- C/C++ code
[version] signature="$CHICAGO$" AdvancedINF=1.0 [Add.Code] Usb.dll=Usb.dll // com控件名字 usbio.dll=usbio.dll // 依赖的其他库 [Usb.dll] file-win32-x86=thiscab RegisterServer=yes clsid={00B2D278-D91C-4FCB-9DD7-7D8905DD91D6} clsid={FEE7C61D-4499-4557-AA77-39B9B44BC63A} clsid={1E017F5F-B253-4F44-9DFC-B03890A2F5E5}
在cmd中通过makecab这个指令我得到了cab包,名字是:usb.cab
然后我在页面中去引用这个com控件。引用代码是这样写的:
- HTML code
<OBJECT id="usb" name="usb" codeBase="usb.cab" classid="clsid:00B2D278-D91C-4FCB-9DD7-7D8905DD91D6" width="0" height="0" > </OBJECT> <OBJECT id="usb" name="usb" codeBase="usb.cab" classid="clsid:FEE7C61D-4499-4557-AA77-39B9B44BC63A" width="0" height="0" > </OBJECT> <OBJECT id="usb" name="usb" codeBase="usb.cab" classid="clsid:1E017F5F-B253-4F44-9DFC-B03890A2F5E5" width="0" height="0" > </OBJECT>
我js中调用usb这个控件中的方法,提示我 调用控件方法失败!Automation服务器不能创建对象。
提示这个错误应该是控件没有注册成功。
我在cmd命令中手动注册这个控件 "regsvr32 usb.dll" ,在js中调用控件中的方法就会成功!
请问是我上面哪个地方错了,应该如何改正。
------解决方案--------------------
如果控件能够通过手工注册,那么问题不是出在控件本身,而很可能出现在cab包中了,如果实在找不到解决的办法就在页面上直接引用或者可以参照下支付宝写inf方式试下吧。不清楚你是如何打cab包的
------解决方案--------------------
你的html 部分代码写错了。只需要执行
- HTML code
<OBJECT id="usb" name="usb" codeBase="usb.cab" classid="clsid:00B2D278-D91C-4FCB-9DD7-7D8905DD91D6" width="0" height="0" > </OBJECT>