VC中调用第三方ActiveX控件,如何在Create时设置 param

时间:2022-05-30 03:13:19
那个第三方ActiveX的网页调用示例:
<OBJECT ID="ThirdPartyCtl" CLASSID="CLSID:00000000-CC0D-44C9-8CFC-D63077BD683C">
<PARAM NAME="xxx" VALUE="yyyy">
</OBJECT>

我在MFC对话框中 添加“ActiveX中的MFC类”

由于这个控件需要license id ,在html页面中,可以通过 <param> 结点设置
但我再VC中直接创建,我不知道如何设置 <param> 就会弹出各种提示,就是告诉你,你需要设置license id 

bSuccess = m_ctrl.Create(_T("XXXControl"), WS_CHILD|WS_VISIBLE, rect, this, 333);
这句无论如何,都会弹出那个框

如果我在这之前调用:m_ctrl.put_licenseid("xxxx");
很显然,COM对象都没创建好,肯定崩溃。

虽然Create成功后,我再调用 put_licenseid 是没问题的,后续调用其他接口方法也正常了,但是开始时候的提示框没办法去掉啊,这是第三方控件啊

各位,有知道如何做的码?

13 个解决方案

#1


将控件拖到界面上,直接在控件属性里设置。

#2


引用 1 楼 homesos 的回复:
将控件拖到界面上,直接在控件属性里设置。


除了此方式,没别的办法了吗?我想用动态创建的方式啊

#3


不是应该使用 CreateControl 来创建吗?
如果需要授权 Key,那么应该
bstrLicKey 
Optional license key data. This data is needed only for creating controls that require a run-time license key. If the control supports licensing, you must provide a license key for the creation of the control to succeed. The default value is NULL. 

#4


引用 3 楼 Saleayas 的回复:
不是应该使用 CreateControl 来创建吗?
如果需要授权 Key,那么应该
bstrLicKey 
Optional license key data. This data is needed only for creating controls that require a run-time license key. If the control supports licensing, you must provide a license key for the creation of the control to succeed. The default value is NULL. 


我之前没用过有license的控件,不知道一般都用啥初始化授权key,不过现在这个是通过 param name 设置的
<PARAM NAME="licenseid" VALUE="xxx">
创建对象过程中就赋值了。。

而且我用了 CreateControl ,最后三个参数传递的是:NULL, FALSE, licKey (行吗?)

结果调用失败,返回FALSE,并且输出窗口显示:
CoCreateInstance of OLE control {xxx-xx-x} failed.
>>> Result code: 0x80040154
>>> Is the control is properly registered?

#5


现在发现个问题,在我VS里,该控件可以加到对话框中,不过看不了属性页,一看 VS 就崩溃 

所以只能用动态创建的方式,难道没有方法吗?

#6


看错了,你的不是 license,而是一个参数。
你试试使用 CoCreateInstance 来创建试试。

#7


CoCreateInstance自己创建控件接口;
设置接口属性;<-- 这个就是你要做的
让你的窗口去AttachControl这个接口,而不是CreateControl,否则你的控件木有机会执行自定义初始化

#8


引用 7 楼 redui 的回复:
CoCreateInstance自己创建控件接口;
设置接口属性;<-- 这个就是你要做的
让你的窗口去AttachControl这个接口,而不是CreateControl,否则你的控件木有机会执行自定义初始化


AttachControl ?这个哪个接口的方法?难道我要再做一个包装控件?“”我的窗口“”就是MFC对话框啊

这层内容看不懂啊,网上哪有例子/Hello world 教程?这实在太底层了,实在不懂啊

#9


在MSDN里面搜“COM Tutorial Samples”

#10


引用 9 楼 zhao4zhong1 的回复:
在MSDN里面搜“COM Tutorial Samples”


你这个是VC6时代的吧,看你再很久之前的某个帖子里提过,需要什么MSDN98吧 ,暂时没有唉。


不过貌似整出来了——
我先摆一个 STATIC 控件,添加控件变量 m_axContainer,
然后 CoCreateInstance 得到接口指针 pMyCtrl,然后 
pMyCtrl->put_Copyright(licKey);
hr = AtlAxAttachControl(pMyCtrl, m_axContainer.GetSafeHwnd(), &pUnkContainer);
这样看起来就好使了,只是不知道 带回的指针 pUnkContainer 有什么用处。。

#12


时代不同了,男女还一样! VC中调用第三方ActiveX控件,如何在Create时设置 param

#13


引用 10 楼 fly4free 的回复:
Quote: 引用 9 楼 zhao4zhong1 的回复:

在MSDN里面搜“COM Tutorial Samples”


你这个是VC6时代的吧,看你再很久之前的某个帖子里提过,需要什么MSDN98吧 ,暂时没有唉。


不过貌似整出来了——
我先摆一个 STATIC 控件,添加控件变量 m_axContainer,
然后 CoCreateInstance 得到接口指针 pMyCtrl,然后 
pMyCtrl->put_Copyright(licKey);
hr = AtlAxAttachControl(pMyCtrl, m_axContainer.GetSafeHwnd(), &pUnkContainer);
这样看起来就好使了,只是不知道 带回的指针 pUnkContainer 有什么用处。。


某些人喜欢创建好控件后对容器接口做些啥,最后的pUnkContainer就是给你返回容器接口,如果你不用,可以不理。当然不是真的不理,这个接口指针还得Release掉

#1


将控件拖到界面上,直接在控件属性里设置。

#2


引用 1 楼 homesos 的回复:
将控件拖到界面上,直接在控件属性里设置。


除了此方式,没别的办法了吗?我想用动态创建的方式啊

#3


不是应该使用 CreateControl 来创建吗?
如果需要授权 Key,那么应该
bstrLicKey 
Optional license key data. This data is needed only for creating controls that require a run-time license key. If the control supports licensing, you must provide a license key for the creation of the control to succeed. The default value is NULL. 

#4


引用 3 楼 Saleayas 的回复:
不是应该使用 CreateControl 来创建吗?
如果需要授权 Key,那么应该
bstrLicKey 
Optional license key data. This data is needed only for creating controls that require a run-time license key. If the control supports licensing, you must provide a license key for the creation of the control to succeed. The default value is NULL. 


我之前没用过有license的控件,不知道一般都用啥初始化授权key,不过现在这个是通过 param name 设置的
<PARAM NAME="licenseid" VALUE="xxx">
创建对象过程中就赋值了。。

而且我用了 CreateControl ,最后三个参数传递的是:NULL, FALSE, licKey (行吗?)

结果调用失败,返回FALSE,并且输出窗口显示:
CoCreateInstance of OLE control {xxx-xx-x} failed.
>>> Result code: 0x80040154
>>> Is the control is properly registered?

#5


现在发现个问题,在我VS里,该控件可以加到对话框中,不过看不了属性页,一看 VS 就崩溃 

所以只能用动态创建的方式,难道没有方法吗?

#6


看错了,你的不是 license,而是一个参数。
你试试使用 CoCreateInstance 来创建试试。

#7


CoCreateInstance自己创建控件接口;
设置接口属性;<-- 这个就是你要做的
让你的窗口去AttachControl这个接口,而不是CreateControl,否则你的控件木有机会执行自定义初始化

#8


引用 7 楼 redui 的回复:
CoCreateInstance自己创建控件接口;
设置接口属性;<-- 这个就是你要做的
让你的窗口去AttachControl这个接口,而不是CreateControl,否则你的控件木有机会执行自定义初始化


AttachControl ?这个哪个接口的方法?难道我要再做一个包装控件?“”我的窗口“”就是MFC对话框啊

这层内容看不懂啊,网上哪有例子/Hello world 教程?这实在太底层了,实在不懂啊

#9


在MSDN里面搜“COM Tutorial Samples”

#10


引用 9 楼 zhao4zhong1 的回复:
在MSDN里面搜“COM Tutorial Samples”


你这个是VC6时代的吧,看你再很久之前的某个帖子里提过,需要什么MSDN98吧 ,暂时没有唉。


不过貌似整出来了——
我先摆一个 STATIC 控件,添加控件变量 m_axContainer,
然后 CoCreateInstance 得到接口指针 pMyCtrl,然后 
pMyCtrl->put_Copyright(licKey);
hr = AtlAxAttachControl(pMyCtrl, m_axContainer.GetSafeHwnd(), &pUnkContainer);
这样看起来就好使了,只是不知道 带回的指针 pUnkContainer 有什么用处。。

#11


#12


时代不同了,男女还一样! VC中调用第三方ActiveX控件,如何在Create时设置 param

#13


引用 10 楼 fly4free 的回复:
Quote: 引用 9 楼 zhao4zhong1 的回复:

在MSDN里面搜“COM Tutorial Samples”


你这个是VC6时代的吧,看你再很久之前的某个帖子里提过,需要什么MSDN98吧 ,暂时没有唉。


不过貌似整出来了——
我先摆一个 STATIC 控件,添加控件变量 m_axContainer,
然后 CoCreateInstance 得到接口指针 pMyCtrl,然后 
pMyCtrl->put_Copyright(licKey);
hr = AtlAxAttachControl(pMyCtrl, m_axContainer.GetSafeHwnd(), &pUnkContainer);
这样看起来就好使了,只是不知道 带回的指针 pUnkContainer 有什么用处。。


某些人喜欢创建好控件后对容器接口做些啥,最后的pUnkContainer就是给你返回容器接口,如果你不用,可以不理。当然不是真的不理,这个接口指针还得Release掉