• 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生成的com中到底是不是可以设置回调函数,不是连接点函数,如果可以,应该如何设置,那位高手给出个明确的答复?100分答谢

atl生成的com中到底是不是可以设置回调函数,不是连接点函数,如果可以,应该如何设置,那位高手给出个明确的答复?100分答谢

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

佚名通过本文主要向大家介绍了 atl生成的com中到底是不是可以设置回调函数,不是连接点函数,如果可以,应该如何设置,那位高手给出个明确的答复?100分答谢等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: atl生成的com中到底是不是可以设置回调函数,不是连接点函数,如果可以,应该如何设置,那位高手给出个明确的答复?100分答谢
描述:

atl生成的com中到底是不是可以设置回调函数,不是连接点函数,如果可以,应该如何设置,那位高手给出个明确的答复,最好有一步一步的代码和注释?100分答谢
这个问题查了很久也没有找到找到完美答案,请高手不吝指教


解决方案1:

可以这样,你的接口提供一个方法,接收一个外部设置的回调函数指针。然后就像实现连接点的那些对象一样,你在合适的时机调用这些方法就行了。好像这样的接口方法必须声明为local的。

解决方案2:

在跨进程或跨计算机的DCOM中是不可以的,因为函数指针是进程相关的。如果是进程内COM是可以的。

解决方案3:

在COM中,函数指针是个内存地址,即是进程相关的,在这个进程根据那个进程中的函数指针发起调用结果将是不可预知的,因此接口方法中是不应该传递函数指针的。

解决方案4:

事件通知方法:
  1:回调函数,在少量的事件通知里,c++等环境使用比较方便,在VB,脚本语言等环境使用比较别扭,但也可以使用
  2:使用回调接口:参见 "http://www.vckbase.com/document/viewdoc/?id=1525" 性能快,适应与一组相关的事件通知。同样主要使用与c++环境.因为VB,脚本环境里不支持虚接口派生。
 3:连接点:参见 "http://www.vckbase.com/document/viewdoc/?id=1538",适应所有的高级语言,因为它通过IDispatch自动化接口进行事件通知,性能慢。

解决方案5:

是否支持回调函数本身并不是COM本身需要讨论的问题。答案是肯定的,因为整个Windows操作系统的很多API内部很多就是通过回调函数实现的,比如BOOL EnumWindows(          WNDENUMPROC lpEnumFunc,
    LPARAM lParam
);
int EnumFontFamilies(
  HDC hdc,                        // handle to DC
  LPCTSTR lpszFamily,             // font family
  FONTENUMPROC lpEnumFontFamProc, // callback function
  LPARAM lParam                   // additional data
);
等。
不过,在有些语言里比如VB等,在设置回调函数指针时就只能强制把函数指针转换为long来进行设置,感觉比较别扭,如果都是在c++环境就无所谓了。

解决方案6:

如果你非要设置函数指针,那就没必要做COM了
其他 语言不一定支持函数指针这个东西.

解决方案7:

atl生成的com中到底是不是可以设置回调函数?
你看IDL的规定有函数指针这种参数没有? 没有吧
老老实实的用连接点吧,就是做这种事情用的.

解决方案8:

COM里实现回调函数如下示例
/**
* 声明回调函数原型
*/
typedef int (* _stdcall FUNC_CALLBACK )(int a,int b) ;
/**
* 接口里声明方法设置回调用函数
*/
interface ComTestI
{
void SetCallBack( FUNC_CALLBACK  func);
};
/**
* 实现类实现设置回调函数,并调用回调函数
*/
class ComTestImpl : public ComTestI
{
/**
* 初始化回调函数指针为NULL
*/
ComTestImpl()
{
m_Func=NULL;
};
/**
* 设置回调函数
*/
void SetCallBack( FUNC_CALLBACK  func)
{
m_Func =func;
}
/**
* 调用回调函数
*/
void FireCallBackMethod()
{
int a =1,b =2;
if( m_Func)
{
m_Func(a,b);
}
}
/**
* 回调函数指针
*/
FUNC_CALLBACK m_Func;
};

解决方案9:

可以啊,你创建对象的时候选上连接点就可以了

解决方案10:

回调函数(call back)肯定是没问题的,和ATL无关,windows操作系统本身就是每秒都在call的你的窗口过程函数。
我怀疑你说的是sink(接收器),这个也是100%支持,ATL就是产生COM代码的模板。

解决方案11:

http://www.vckbase.com/document/viewdoc/?id=1525

解决方案12:

http://www.vckbase.com/document/viewdoc/?id=1538

解决方案13:

用双向接口,可以


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

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

  • atl生成的com中到底是不是可以设置回调函数,不是连接点函数,如果可以,应该如何设置,那位高手给出个明确的答复?100分答谢

相关文章

  • 2017-06-04 一个com的问题,高手请进!欢迎进来讨论。谢谢!
  • 2017-06-04 通过文档对象模型访问ActiveX控件
  • 2017-06-05 DLL内使用对话框的问题(简单赚分)
  • 2017-06-04 高分急问:wmpsdk小问题
  • 2017-06-04 编译程序OCX的时候变成了执行程序
  • 2017-06-05 mfc做googlemap应用的问题
  • 2017-06-04 怎样打印第三方控件内容
  • 2017-06-05 关于data_seg的很重要的问题。
  • 2017-06-05 关于_beginthreadex的第四个参数!
  • 2017-06-05 800分挥泪求解(不够再补)!我的程序已经退出了,可是Windows任务管理器的进程表中为什么还有它?!十几分钟后才能消失!

文章分类

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

最近更新的内容

    • 如何DeskBand一安装就显示?
    • [求助]构件时出错
    • ADODC执行insert命令的一个问题
    • 简单问题,请各位赐教
    • 在不知道窗口标题的情况下如何获得对话框的窗口句柄?
    • WindowsMediaPlayer控件的“快退”无效问题
    • 请问如何在两个进程中共享一个数组???
    • 求救!程序在atlsimpstrh中中断,提示读取位置0x00000000时发生访问冲突
    • 把CView封装到ActiveX
    • 想了半天,也没有想出来的问题,望大家指教

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

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