• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > ATL连接点的方法的参数如何传递对象

ATL连接点的方法的参数如何传递对象

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了atl方形动力电池,atl34砂轮,atl80.dll官方下载,atl71.dll修复,atl71.dll一键修复等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: ATL连接点的方法的参数如何传递对象
描述:

我想用ATL做一个组件,返回ADO的Recordset对象,给VB对象
方法的声明:HRESULT GetADORecordset([in] BSTR ConnString,[in] BSTR SQLString,[out,retval] IDispatch **RS);
方法的实现:
STDMETHODIMP CGetADO::GetADORecordset(BSTR ConnString, BSTR SQLString, IDispatch **RS)
{ _ConnectionPtr pCN;
_RecordsetPtr pRS;
_variant_t vtEmpty;
pCN.CreateInstance(__uuidof(Connection));
pCN->ConnectionString =ConnString;
pCN->Open("", "", "", -1);
pRS = pCN->Execute(SQLString, &vtEmpty, adCmdUnknown);
pRS->QueryInterface(IID_IDispatch,(void**) ptp->RS);
         return S_OK;
}
用VB调用之后返回Recordset对象,但是这样不稳定,因为无法通知返回Recordset对象成功,因此需要用连接点来触发一个事件
连接点的方法声明:HRESULT OnGetADORecordset(IDispatch **RS);
原GetADORecordset改为:
STDMETHODIMP CGetADO::GetADORecordset(BSTR ConnString, BSTR SQLString)
{
_ConnectionPtr pCN;
_RecordsetPtr pRS;
_variant_t vtEmpty;
IDispatch **RS=NULL;
pCN.CreateInstance(__uuidof(Connection));
pCN->C /> pCN->Open("", "", "", -1);
pRS = pCN->Execute(SQLString, &vtEmpty, adCmdUnknown);
pRS->QueryInterface(IID_IDispatch,(void**)RS);
Fire_OnGetADORecordset(RS);
return S_OK;
}
这样VB调用之后没有触发OnGetADORecordset事件,Fire_OnGetADORecordset(RS);这句话不成功,是不是参数RS的类型有问题呢,还是什么原因,连接点的方法的参数如何传递对象,请教各位,谢谢。


解决方案1:

HRESULT Fire_OnGetADORecordset(IDispatch *RS)
{
CComVariant varResult;
T* pT = static_cast<T*>(this);
int nConnectionIndex;
CComVariant* pvars = new CComVariant[1];
int nConnections = m_vec.GetSize();
for (nConnectionIndex = 0; nConnectionIndex < nConnections; nConnectionIndex++)
{
pT->Lock();
CComPtr<IUnknown> sp = m_vec.GetAt(nConnectionIndex);
pT->Unlock();
IDispatch* pDispatch = reinterpret_cast<IDispatch*>(sp.p);
if (pDispatch != NULL)
{
VariantClear(&varResult);
pvars[0] = RS;
DISPPARAMS disp = { pvars, NULL, 1, 0 };
pDispatch->Invoke(0x1, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &disp, &varResult, NULL, NULL);
}
}
delete[] pvars;
return varResult.scode;
}
Invoke函数中第一个参数的序号一定要与接口中的一致,如果接口中的数字为5,那么第一个参数为0x5,这样应该就可以了.

解决方案2:

1.对于VB来说,它只能使用默认的接连点,并且只能有一个
在idl中有没有
dispinterface _IXXXEvents
{
properties:
methods:
}
[default,source] dispinterface _IXXXEvents;
并且
在ATL类中有没有
public IProvideClassInfo2Impl<&CLSID_GridCtrl, &__uuidof(_IXXXEvents), &LIBID_GridLib>,


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • ATL怎么实现可变参数的接口?
  • 怎样用ATL写一个含有其它组件的进程外COM
  • ATL7中加入socket的头文件编译出错
  • 在ATL工程MFC窗口调用Create失败(注:我的ATL工程支持MFC)
  • ATL正则表达式验证遇到中文出现异常!
  • 关于ATL做复合控件的问题
  • [讨论]ATL中的文本字符串,我该定义为什么类型
  • ATL开发指南第2版为什么所有的书店都没有卖的?电子版也没有
  • 大家一般都怎么打包Atl开发的ActiveX控件?
  • 真正的高手在哪里,天下第一难题(关于ATL对话框)

相关文章

  • 2017-06-04 已经知道DLL中某个函数的名字,现在有该函数的一组输入数据,是不是可以使用COM中的IDispatch来执行该函数?
  • 2017-06-04 怎样知道Powerpoint中的Textframe当前能容纳多少汉字??
  • 2017-06-04 ISample1Ptr还是ISample2Ptr?
  • 2017-06-04 谁知道这种加载缩略图是如何实现的?
  • 2017-06-04 请教连接点事件的参数回传问题
  • 2017-06-04 VC调用控件的问题
  • 2017-06-04 接口查询问题
  • 2017-06-04 为啥我的DirectShow的播放窗口不能自动刷新了啊???
  • 2017-06-04 请教嵌套ocx的问题
  • 2017-06-04 再问一个有点深度的问题,有关IE的,支着了,兄弟们。

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 一个DLL工程,VC链接的时候需要消耗15G内存WHY????
    • 遇到一个DLL的调用问题,请大家近来看看帮帮忙!
    • 用MSXML生成XML文件时,为什么每个TAG不换行
    • 很头痛的问题
    • 关于在纯ATL使用CPoint
    • 动态连接库的问题,,,在线等待,,,高手救急!!!!!!!
    • [急刚解决一个问题,又冒一个]OCX访问网页4次后,网页中的按钮就没有反应了。
    • APIHOOK的致命疑问!
    • 如何在VC对话框中随机加载BMP图片????
    • 在线程中使用CSOCKET的问题?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有