ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 无法使ATL连接点正常工作

2019-08-27 18:06:20  阅读:259  来源: 互联网

标签:atl c events com connection-points


我正在尝试使用ATL创建一个COM组件,我想为我的VB客户端引发事件.我发现了很多教程,所有这些教程的细节都各不相同,而且它们似乎都没有产生可行的解决方案.这是我在做的事情:

(使用Visual Studio 2008):

>创建一个新的ATL DLL项目.我称之为ATLEventTest.
>类视图:右键单击ATLEventTest,添加了一个新的ATL简单对象类.
我调用了MyObject,它生成了CMyObject,IMyObject等…
>此对象创建于:
a)公寓线程
b)聚合
c)双接口
d)ISupportErrorInfo
e)连接点
>右键单击CProxy_IMyObjectEvents< T>,单击“添加功能”
>函数是void返回类型,名为someEvent,并采用int testParam.
>重建.
(此时,我应该可以在某个地方看到’实施连接点’.我不……)
>右键单击CMyObject. ‘添加连接点’
>将’_IMyObjectEvents’移到列表中.
>我的解决方案中是否有代码搜索.在任何地方找不到一些事件!
>再次添加了someEvent函数.现在,它可以在ATLEventTest_i.h中找到
>应该能够在我的代码中调用fire_someEvent(…),但不能.

这让我疯狂,试图让它发挥作用.如果有人能看到我做错了什么,我会感谢任何更正,提示,黑客等.

在这一点上,我很想说要搞砸巫师,并试着直接修改c和idl,但我有一种可能不太好的感觉:(

解决方法:

尝试使用此位置概述的方法:

Adding an Event (ATL) @ MSDN

使用上面给出的示例名称,在MyObject.idl文件中,即使在dispinterface _IMyObjectEvents部分下也应该看到出站声明.由于您右键单击CProxy_IMyObjectEvents< T>而不是在库下的_IMyObjectEvents上,您的IDL可能缺少定义.自动生成的文件_IMyObjectEvents_CP.h文件应存在于项目头文件中,并且应该包含Fire_someEvent()方法,以便正确添加方法.如果没有,您可能会发现它只是创建了一个名为someEvent()的方法.

以下是您可以在测试项目中尝试的大纲.

>创建一个新的ATL DLL项目.我称之为ATLEventTest1.
>建设项目.
>类视图:右键单击ATLEventTest1,添加一个新的ATL简单对象类.称之为MyObject.
>创建定义a)公寓线程b)双界面c)连接点和你需要的任何其他东西.
>重建项目.
>类视图:找到ATLEventTest1Lib库,右键单击_MyObjectEvents,然后单击“添加方法”.
> Method是void返回类型,名为someEvent,并采用带参数attribute [in]的int testParam.
>作为添加参数的结果,您应该看到“[in] int testParam”.
>在“IDL属性”选项卡上,根据需要更改ID.单击完成.
>类视图:右键单击CMyObject,转到添加…,转到实现连接点.
>选择_IMyObjectEvents并单击“>”将其移动到已实现的连接点列表.单击完成.
>重建.
>现在,在您的CMyObject类中,您应该能够调用Fire_someEvent().您将在调度接口_IMyObjectEvents下的ATLEventTest1.idl文件中看到一个新方法;将创建头文件_IMyObjectEvents_CP.h文件,并将为Fire_someEvent()创建广播代码.

标签:atl,c,events,com,connection-points
来源: https://codeday.me/bug/20190827/1743336.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有