如何在console程序中调用activex控件

梧桐168 2010-05-19 08:28:55
一般都是MFC或者ATL里调用ActiveX控件,但我现在需要在console中调用一个ocx文件,刚开始大致如下调用

#import "path\\abc.ocx" no_namespace named_guids
IIDMYInterface* pitd = 0 ;
HRESULT hr = CoCreateInstance(
CLSID_MYCLASS,//Com对象标识符
NULL,//指向接口IUnknown指针
CLSCTX_ALL,//运行可执行代码上下文
__uuidof(_IIDMYInterface),//Com对象接口标识符
reinterpret_cast<void**>(&pitd)//用来接收指向Com对象接口地址指针变量
);
if (SUCCEEDED(hr))
{
。。。
pitd->Call(lType, (short*)&loginPara);}

但结果会crash,后来参看了
http://www.codeproject.com/kb/com/comdispatchdriver.aspx?fid=2689&fr=51&df=90&mpp=25&noise=3&sort=Position&view=Quick#xx0xx
照着上面调用,也还是不行。 有同事说有的控件必须要设置什么controlsite,不知道怎么弄?有没有高手给点意见
...全文
600 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xsw446966542 2011-03-10
  • 打赏
  • 举报
回复
ATL调用activex的事件怎么用啊?新手学习中
梧桐168 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gw_net 的回复:]
你可以把代码发给我,我帮你调试看看
gw_net@163.com
[/Quote]
谢谢了,已经给你发了个小例子,


[Quote=引用 8 楼 yincheng01 的回复:]
参考下MSDN的例子吧
http://support.microsoft.com/kb/246227
[/Quote]
你这个链接发错了吧


如果正如jameshooo所说“某些OCX必须在容器中激活才能正常使用,某些OCX不需要容器也能使用” 那该如何判断?

wencheng2998 2010-05-21
  • 打赏
  • 举报
回复
帮顶~
尹成 2010-05-21
  • 打赏
  • 举报
回复
参考下MSDN的例子吧
http://support.microsoft.com/kb/246227
gw_net 2010-05-21
  • 打赏
  • 举报
回复
你可以把代码发给我,我帮你调试看看
gw_net@163.com
wshcdr 2010-05-21
  • 打赏
  • 举报
回复
基本上要实现成一个 容器
梧桐168 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jameshooo 的回复:]
1、调用CoInitialize(0)/CoUninitialize()
2、在CoUninitialize()调用之前必须确保所有已创建/获取的接口指针都释放完毕
3、某些OCX必须在容器中激活才能正常使用,某些OCX不需要容器也能使用
[/Quote]
前两点我都做到了,怀疑就是第三点的原因,怎么判断OCX是否需要容器,还有如何在console里给它设置容器呢?
梧桐168 2010-05-20
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 it_fly 的回复:]
引用 1 楼 jameshooo 的回复:
1、调用CoInitialize(0)/CoUninitialize()
2、在CoUninitialize()调用之前必须确保所有已创建/获取的接口指针都释放完毕
3、某些OCX必须在容器中激活才能正常使用,某些OCX不需要容器也能使用

前两点我都做到了,怀疑就是第三点的原因,怎么判断OCX是否需要容器,还有如何在console里给它设置容……
[/Quote]
我目前的方案是创建一个隐藏窗体,然后以这个窗体为父窗体创建控件容器,但是想问问有没有其它
更简单的方案。
WaistCoat09 2010-05-19
  • 打赏
  • 举报
回复
检查每一步的返回值又助于发现问题。
jameshooo 2010-05-19
  • 打赏
  • 举报
回复
1、调用CoInitialize(0)/CoUninitialize()
2、在CoUninitialize()调用之前必须确保所有已创建/获取的接口指针都释放完毕
3、某些OCX必须在容器中激活才能正常使用,某些OCX不需要容器也能使用

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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