请问C++怎样响应COM+的事件呢?

hyblusea 2009-12-03 03:42:07
查了些资料,感觉很难,所以发贴请教 。谢谢,代码已经实现了COM+方法的调用。

void _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;

//初始化COM
CoInitialize ( NULL );

//创建智能指针
MyComPlus::IHelloPtr ptr;

// 创建实例
hr = ptr.CreateInstance(__uuidof (MyComPlus::ComPlusTest));
class IDispEventImpl<0, T, pdiid, plibid, MajorVer, MinorVer, tihClass>
{

};

if(hr == S_OK)
{
while(true)
{
cout << ptr->SayHello("aaaa") << "\n";
}
}

CoUninitialize();
system( "pause ");
}


但是还有一个事件“OnArrive”,应该怎样去响应呢?
...全文
202 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
z569362161 2009-12-04
  • 打赏
  • 举报
回复
C#有什么用啊!
hyblusea 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 wshcdr 的回复:]
COM+的事件,用消息队列吧
[/Quote]

有详细例子吗?
yshuise 2009-12-04
  • 打赏
  • 举报
回复
dd
wshcdr 2009-12-04
  • 打赏
  • 举报
回复
或者楼主去看看 COM中的连接点的资料
hyblusea 2009-12-04
  • 打赏
  • 举报
回复
自己顶。
limit_clear 2009-12-03
  • 打赏
  • 举报
回复
帮顶
wshcdr 2009-12-03
  • 打赏
  • 举报
回复
COM+的事件,用消息队列吧
hyblusea 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 loaden 的回复:]
引用 7 楼 hyblusea 的回复:
不明白 IDispEventImpl <这里面的参数应该怎么样写 >

谢谢。

这个你得找些COM入门的书看。

给你找了几个相关链接,你参考下:
http://www.7880.com/Info/Article-5166eda0.html
http://www.zhuw.com/www/info/35179-1.htm
http://www.soidc.net/articles/1215485053486/20060402/1215945558615_1.html
http://blog.csdn.net/boy_north/archive/2006/06/15/798830.aspx
[/Quote]

关于 T 的描述: T是事件接收器类的名字 ; 这句话我还是没有明白,我这里,T应该写什么呢?
老邓 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hyblusea 的回复:]
不明白 IDispEventImpl <这里面的参数应该怎么样写 >

谢谢。
[/Quote]
这个你得找些COM入门的书看。

给你找了几个相关链接,你参考下:
http://www.7880.com/Info/Article-5166eda0.html
http://www.zhuw.com/www/info/35179-1.htm
http://www.soidc.net/articles/1215485053486/20060402/1215945558615_1.html
http://blog.csdn.net/boy_north/archive/2006/06/15/798830.aspx
hyblusea 2009-12-03
  • 打赏
  • 举报
回复
不明白 IDispEventImpl< 这里面的参数应该怎么样写 >

谢谢。
a452325305 2009-12-03
  • 打赏
  • 举报
回复
自己建立个消息队列吧
stning 2009-12-03
  • 打赏
  • 举报
回复
up
hyblusea 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 loaden 的回复:]
你连个消息循环都没有,怎么接收消息啊?
[/Quote]

报了一些错:
1>CallComPlus.cpp
1>.\CallComPlus.cpp(33) : error C2065: “T”: 未声明的标识符
1>.\CallComPlus.cpp(33) : error C2065: “pdiid”: 未声明的标识符
1>.\CallComPlus.cpp(33) : error C2065: “plibid”: 未声明的标识符
1>.\CallComPlus.cpp(33) : error C2065: “MajorVer”: 未声明的标识符
1>.\CallComPlus.cpp(33) : error C2065: “MinorVer”: 未声明的标识符
1>.\CallComPlus.cpp(33) : error C2065: “tihClass”: 未声明的标识符
hyblusea 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 loaden 的回复:]
你连个消息循环都没有,怎么接收消息啊?
[/Quote]

抱歉,我只会C#,初学C++。在C#是很简单的一个+=就可以预约一个事件。C++具体应该怎样做,请高手详细指点一下。
老邓 2009-12-03
  • 打赏
  • 举报
回复
这样试试:
void _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;

//初始化COM
CoInitialize(NULL);

//创建智能指针
MyComPlus::IHelloPtr ptr;

// 创建实例
hr = ptr.CreateInstance(__uuidof(MyComPlus::ComPlusTest));
class IDispEventImpl<0, T, pdiid, plibid, MajorVer, MinorVer, tihClass>
{

};

if (hr == S_OK)
{
while (true)
{
cout << ptr->SayHello("aaaa") << "\n";
}
}

MSG msg;
while (int ret = ::GetMessage(&msg, NULL, 0, 0) != 0)
{
if (ret == -1) break; // handle the error and possibly exit
else
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
}

CoUninitialize();
return static_cast<int>(msg.wParam);
}
老邓 2009-12-03
  • 打赏
  • 举报
回复
你连个消息循环都没有,怎么接收消息啊?

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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