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

fly4free 2016-06-13 04:34:22
那个第三方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 是没问题的,后续调用其他接口方法也正常了,但是开始时候的提示框没办法去掉啊,这是第三方控件啊

各位,有知道如何做的码?
...全文
176 点赞 收藏 13
写回复
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-06-14
在MSDN里面搜“COM Tutorial Samples”
回复
redui 2016-06-14
引用 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 有什么用处。。[/quote] 某些人喜欢创建好控件后对容器接口做些啥,最后的pUnkContainer就是给你返回容器接口,如果你不用,可以不理。当然不是真的不理,这个接口指针还得Release掉
回复
赵4老师 2016-06-14
时代不同了,男女还一样!
回复
赵4老师 2016-06-14
fly4free 2016-06-14
引用 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 有什么用处。。
回复
fly4free 2016-06-13
引用 7 楼 redui 的回复:
CoCreateInstance自己创建控件接口; 设置接口属性;<-- 这个就是你要做的 让你的窗口去AttachControl这个接口,而不是CreateControl,否则你的控件木有机会执行自定义初始化
AttachControl ?这个哪个接口的方法?难道我要再做一个包装控件?“”我的窗口“”就是MFC对话框啊 这层内容看不懂啊,网上哪有例子/Hello world 教程?这实在太底层了,实在不懂啊
回复
redui 2016-06-13
CoCreateInstance自己创建控件接口; 设置接口属性;<-- 这个就是你要做的 让你的窗口去AttachControl这个接口,而不是CreateControl,否则你的控件木有机会执行自定义初始化
回复
Saleayas 2016-06-13
看错了,你的不是 license,而是一个参数。 你试试使用 CoCreateInstance 来创建试试。
回复
fly4free 2016-06-13
现在发现个问题,在我VS里,该控件可以加到对话框中,不过看不了属性页,一看 VS 就崩溃 所以只能用动态创建的方式,难道没有方法吗?
回复
fly4free 2016-06-13
引用 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?
回复
Saleayas 2016-06-13
不是应该使用 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.
回复
fly4free 2016-06-13
引用 1 楼 homesos 的回复:
将控件拖到界面上,直接在控件属性里设置。
除了此方式,没别的办法了吗?我想用动态创建的方式啊
回复
熊猫贩子 2016-06-13
将控件拖到界面上,直接在控件属性里设置。
回复
发动态
发帖子
ATL
创建于2007-09-28

3206

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
申请成为版主
社区公告
暂无公告