CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

不使用mfc在atl中如何使用activex控件???

楼主kenwhale(屠夫)2001-11-22 16:15:44 在 VC/MFC / ATL/ActiveX/COM 提问

我通过IDispatch::Invoke怎么老出错/? 问题点数:50、回复次数:17Top

1 楼kenwhale(屠夫)回复于 2001-11-22 16:23:57 得分 0

a   pTop

2 楼masterz(www.fruitfruit.com)回复于 2001-11-22 16:40:32 得分 10

use   smart   pointer  
  only   automation   object   implements   IDispatch.(Not   all   COM   can   be   called   by   Invoke)Top

3 楼arxing(阿行)回复于 2001-11-22 19:53:41 得分 30

在C++里面能不用Invoke最好不用。  
  不知道你是怎样调用的,能详细点吗?Top

4 楼kenwhale(屠夫)回复于 2001-11-22 21:50:20 得分 0

又是两位!多谢,  
  没办法,我要写一个控件集成一个扫描控件。我通过oleview得到他的idl文件,编译出头文件后看了看有IDispatch接口,可没有其他方法的声明(我有说明书)。我只好在我的控件中来IDispatch::Invoke他了,我查询他的ID都能成功,但我用这个id去调用时就会出错!!错误代码:0x8000ffff。用errlook看了一下居然是:灾难性错误!!命苦啊!   Top

5 楼kenwhale(屠夫)回复于 2001-11-22 21:51:54 得分 0

调用代码如下:(m_pFtScn2是一个内部组件)  
  VARIANTARG   vaRet;  
  VariantInit(&vaRet);  
  DISPPARAMS   dispparms;  
  memset(&dispparms,0,sizeof(dispparms));  
  dispparms.cArgs=1;  
  VARIANTARG   *pArg=new   VARIANTARG;  
  dispparms.rgvarg=pArg;  
  dispparms.rgvarg[0].vt=VT_I4;  
  dispparms.rgvarg[0].lVal=(long)m_hWnd;  
  HRESULT   hr=m_pFtScn2->Invoke(dispid,  
      IID_NULL,  
      LOCALE_SYSTEM_DEFAULT,  
      DISPATCH_METHOD,  
      &dispparms,  
      &vaRet,  
      NULL,  
      NULL);  
  delete   pArg;  
  return   hr;  
  但是每次都返回0x8000FFFF灾难性故障   什么鸟意思啊!!Top

6 楼arxing(阿行)回复于 2001-11-23 11:18:21 得分 0

先用VariantInit把参数初始化看看吧,这是个好习惯。  
  不过,我认为最大可能是说明书有误,跟开发商联系一下吧。Top

7 楼kenwhale(屠夫)回复于 2001-11-23 11:25:56 得分 0

可是我在mfc中插入这个控件的话,就没问题可以用!我试着用COleDispatchDriver来调用还是不行,mfc里面是怎么实现的???Top

8 楼SuperChen(哇噻)回复于 2001-11-23 13:29:25 得分 10

ActiveX   Control   不能從普通的父窗口中   Invoke   出來,   而需要包含在   Control   Container   中,建議你在   MSDN   中查一下   "ActiveX   Control   and   Control   Container   Guidelines"   或者相關內容,   最好還是用   MFC,用   Win32   SDK   來寫很累的.Top

9 楼arxing(阿行)回复于 2001-11-23 15:24:08 得分 0

我自己写了一个测试程序,仿照kenwhale(屠夫)的参数,然后发现它的代码完全可以正确调用,不用象SuperChen(兔子)说的那样需要包含在Control   Container中,可以用Invoke调用,但是我的接口不是纯dispatch接口,是双接口(抱歉,我不知道怎么实现纯dispath接口)。  
  kenwhale(屠夫)这段代码我都原封不动使用的,他这里唯一就是dispid来历不明(不会是太大意把dispid弄错了吧,哈哈!)。Top

10 楼kenwhale(屠夫)回复于 2001-11-23 15:38:21 得分 0

SuperChen(兔子):我也想用mfc啊,可要在atl里面写。  
  阿行:我都想是dispid搞错了,那多好啊,天空多美丽!可我看了n遍而且用了n*n种方法表明id没错。  
  const   IID   LIBID_FtScn2Lib   =   {0x1ECEC605,0x2DB6,0x11D3,0xA1,0xA0,0x00,0x00,0x0E,0xA5,0x55,0xD5}};  
  const   IID   DIID__DFtScn2   =   {0x1ECEC606,0x2DB6,0x11D3,0xA1,0xA0,0x00,0x00,0x0E,0xA5,0x55,0xD5}};  
  const   IID   DIID__DFtScn2Events   =   {0x1ECEC607,0x2DB6,0x11D3,0xA1,0xA0,0x00,0x00,0x0E,0xA5,0x55,0xD5}};  
  const   CLSID   CLSID_FtScn2   =   {0x1ECEC608,0x2DB6,0x11D3,0xA1,0xA0,0x00,0x00,0x0E,0xA5,0x55,0xD5}};  
   
  你说这里他把接口都表示为DIID是不是说这个是纯dispatch接口/?Top

11 楼kenwhale(屠夫)回复于 2001-11-23 16:44:27 得分 0

看了看好像真的是纯DISPATCH接口,我该怎么办?Top

12 楼leng_cn(晓峰)回复于 2001-11-23 17:39:07 得分 0

to:兔子:你知道有没有什么办法可以不用数字签名而可以直接  
  进行下载控件的办法呀  
  Top

13 楼arxing(阿行)回复于 2001-11-23 18:15:53 得分 0

不是这个,dispid   是1,2,3,4...,idl文件里面[id(1),   helpstring...声明的这个序号。  
  我试过了在ATL生成的组件里面去掉了双接口的入口,结果仅仅凭IDispatch,一样可以invoke它的方法。Top

14 楼arxing(阿行)回复于 2001-11-23 18:23:15 得分 0

可以用IDispatch::GetIDsOfNames得到dispid。Top

15 楼kenwhale(屠夫)回复于 2001-11-23 23:03:50 得分 0

arxing(阿行) :我试着用过GetIDsOfNames得到dispid可以成功得到,也与idl文件里面的吻合,哎,可是用这个id去invoke就会出错,可我不把他作为包容的内部控件仅仅用mfc写一个客户端来用这控件又不会有问题,真让人迷茫!!!Top

16 楼arxing(阿行)回复于 2001-11-24 13:38:06 得分 0

这也太奇怪了,这样吧,你跟踪mfc,一直找到调用IDispatch::Invoke的地方,看看它的参数是否跟你的一模一样。Top

17 楼kenwhale(屠夫)回复于 2001-11-25 17:27:57 得分 0

我跟踪了一下,好吧,我再去仔细看看吧,Top

相关问题

  • MFC ActiveX控件的问题,很急
  • MFC ActiveX控件删除属性问题
  • 如何在MFC ActiveX控件中截获子控件的事件
  • 请大侠赐教,ATL如何调用MFC做的ActiveX控件的事件接口
  • atl写activeX控件的问题
  • 开发MFC ActiveX控件,如何将控件显示区域大小固定
  • ActiveX控件??
  • Activex 控件!
  • activeX 控件
  • ActiveX 控件

关键词

  • 控件
  • 接口
  • 代码
  • activex
  • mfc
  • 文件
  • dispparms
  • d3
  • 调用
  • ecec

得分解答快速导航

  • 帖主:kenwhale
  • masterz
  • arxing
  • SuperChen

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo