• 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 > 帮我分析一下MFC自动化服务器中连接点即CallBack的出错的原因。进来给分,不够可以在给。

帮我分析一下MFC自动化服务器中连接点即CallBack的出错的原因。进来给分,不够可以在给。

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

佚名通过本文主要向大家介绍了帮我分析一下MFC自动化服务器中连接点即CallBack的出错的原因。进来给分,不够可以在给。等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 帮我分析一下MFC自动化服务器中连接点即CallBack的出错的原因。进来给分,不够可以在给。
描述:

我的服务器是一个MFC的自动化服务器,代码如下:
#ifndef _COM_INTERFACE_
#define _COM_INTERFACE_
// {81EE1E76-E2D6-4563-BC08-2CF75E8EF6AA}
static const IID IID_IHelloSpeaker = 
{ 0x81ee1e76, 0xe2d6, 0x4563, { 0xbc, 0x8, 0x2c, 0xf7, 0x5e, 0x8e, 0xf6, 0xaa } };
// {3568227A-DD93-4d53-A172-BC26BF005F67}
static const IID IID_IHelloSpeaker3 = 
{ 0x3568227a, 0xdd93, 0x4d53, { 0xa1, 0x72, 0xbc, 0x26, 0xbf, 0x0, 0x5f, 0x67 } };
/*
// {72B9B9A7-A0A7-4F1F-8CB8-8C243B5AAD3D}
static const IID CLSID_DispatchObject = //郪璃ID
{ 0x72b9b9a7, 0xa0a7, 0x4f1f, { 0x8c, 0xb8, 0x8c, 0x24, 0x3b, 0x5a, 0xad, 0x3d } };
*/
struct IHelloSpeaker:IUnknown
{
STDMETHOD_(void,SayHello)(BSTR bstrMsg) = 0 ; 
};
struct IHelloSpeaker3:IUnknown
{
STDMETHOD_(void,SayHello)(BSTR bstrMsg) = 0 ; 
};
#endif
class CDispatchServerDlgAutoProxy : public CCmdTarget
{
DECLARE_DYNCREATE(CDispatchServerDlgAutoProxy)
CDispatchServerDlgAutoProxy();           // protected constructor used by dynamic creation
// Attributes
public:
CDispatchServerDlg* m_pDialog;
// Operations
public:
void  FireHelloEvent(BSTR bstrMsg);
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CDispatchServerDlgAutoProxy)
public:
virtual void OnFinalRelease();
//}}AFX_VIRTUAL
// Implementation
protected:
virtual ~CDispatchServerDlgAutoProxy();
// Generated message map functions
//{{AFX_MSG(CDispatchServerDlgAutoProxy)
// NOTE - the ClassWizard will add and remove member functions here.
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
DECLARE_OLECREATE(CDispatchServerDlgAutoProxy)
DECLARE_DISPATCH_MAP()
DECLARE_CONNECTION_MAP()
BEGIN_INTERFACE_PART(HelloSpeaker,IHelloSpeaker)
INIT_INTERFACE_PART(CDispatchServerDlgAutoProxy, HelloSpeaker)
STDMETHOD_(void,SayHello)(BSTR bstrMsg);
END_INTERFACE_PART(HelloSpeaker)
BEGIN_CONNECTION_PART(CDispatchServerDlgAutoProxy, HelloSpeaker3Event)
CONNECTION_IID(IID_IHelloSpeaker3)
END_CONNECTION_PART(HelloSpeaker3Event)
// Generated OLE dispatch map functions
//{{AFX_DISPATCH(CDispatchServerDlgAutoProxy)
afx_msg void SysHelloEvent();
//}}AFX_DISPATCH
DECLARE_INTERFACE_MAP()
};
IMPLEMENT_DYNCREATE(CDispatchServerDlgAutoProxy, CCmdTarget)
CDispatchServerDlgAutoProxy::CDispatchServerDlgAutoProxy()
{
EnableConnections();
EnableAutomation();
AfxOleLockApp();
ASSERT (AfxGetApp()->m_pMainWnd != NULL);
ASSERT_VALID (AfxGetApp()->m_pMainWnd);
ASSERT_KINDOF(CDispatchServerDlg, AfxGetApp()->m_pMainWnd);
m_pDialog = (CDispatchServerDlg*) AfxGetApp()->m_pMainWnd;
m_pDialog->m_pAutoProxy = this;
}
CDispatchServerDlgAutoProxy::~CDispatchServerDlgAutoProxy()
{
if (m_pDialog != NULL)
m_pDialog->m_pAutoProxy = NULL;
AfxOleUnlockApp();
}
void CDispatchServerDlgAutoProxy::OnFinalRelease()
{
CCmdTarget::OnFinalRelease();
}
BEGIN_MESSAGE_MAP(CDispatchServerDlgAutoProxy, CCmdTarget)
//{{AFX_MSG_MAP(CDispatchServerDlgAutoProxy)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BEGIN_DISPATCH_MAP(CDispatchServerDlgAutoProxy, CCmdTarget)
//{{AFX_DISPATCH_MAP(CDispatchServerDlgAutoProxy)
DISP_FUNCTION(CDispatchServerDlgAutoProxy, "SysHelloEvent", SysHelloEvent, VT_EMPTY, VTS_NONE)
//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()
// {48314AAA-3CC5-485F-A065-CA1E9AFFF0F7}
static const IID IID_IDispatchServer =
{ 0x48314aaa, 0x3cc5, 0x485f, { 0xa0, 0x65, 0xca, 0x1e, 0x9a, 0xff, 0xf0, 0xf7 } };
BEGIN_INTERFACE_MAP(CDispatchServerDlgAutoProxy, CCmdTarget)
INTERFACE_PART(CDispatchServerDlgAutoProxy, IID_IHelloSpeaker, HelloSpeaker)  
INTERFACE_PART(CDispatchServerDlgAutoProxy, IID_IDispatchServer, Dispatch)
INTERFACE_PART(CDispatchServerDlgAutoProxy, IID_IConnectionPointContainer, ConnPtContainer)    
END_INTERFACE_MAP()
BEGIN_CONNECTION_MAP(CDispatchServerDlgAutoProxy, CCmdTarget)
    CONNECTION_PART(CDispatchServerDlgAutoProxy, IID_IHelloSpeaker3, HelloSpeaker3Event)
END_CONNECTION_MAP()
// The IMPLEMENT_OLECREATE2 macro is defined in StdAfx.h of this project
// {72B9B9A7-A0A7-4F1F-8CB8-8C243B5AAD3D}
IMPLEMENT_OLECREATE2(CDispatchServerDlgAutoProxy, "DispatchServer.Application", 0x72b9b9a7, 0xa0a7, 0x4f1f, 0x8c, 0xb8, 0x8c, 0x24, 0x3b, 0x5a, 0xad, 0x3d)
STDMETHODIMP_(ULONG) CDispatchServerDlgAutoProxy::XHelloSpeaker::AddRef()
{
    METHOD_PROLOGUE(CDispatchServerDlgAutoProxy, HelloSpeaker)
    return pThis->ExternalAddRef();
}
STDMETHODIMP_(ULONG) CDispatchServerDlgAutoProxy::XHelloSpeaker::Release()
{
    METHOD_PROLOGUE(CDispatchServerDlgAutoProxy, HelloSpeaker)
    return pThis->ExternalRelease() ;
}
STDMETHODIMP_(HRESULT) CDispatchServerDlgAutoProxy::XHelloSpeaker::QueryInterface(REFIID iid, LPVOID* ppvObj)
{
    METHOD_PROLOGUE(CDispatchServerDlgAutoProxy, HelloSpeaker)
    return pThis->ExternalQueryInterface(&iid,ppvObj) ;
}
void  CDispatchServerDlgAutoProxy::FireHelloEvent(BSTR bstrMsg)
{
//now check the connection Point
POSITION pos =m_xHelloSpeaker3Event.GetStartPosition();
IHelloSpeaker3* pHelloSpeaker3 = NULL;
while(pos != NULL)
{
pHelloSpeaker3 = (IHelloSpeaker3*)m_xHelloSpeaker3Event.GetNextConnection(pos);
ASSERT(pHelloSpeaker3);
TRY
TRACE0("Fire Hello Event...\n");
pHelloSpeaker3->SayHello(bstrMsg);
END_TRY
}
}
STDMETHODIMP_(void) CDispatchServerDlgAutoProxy::XHelloSpeaker::SayHello(BSTR bstrMsg)
{
    METHOD_PROLOGUE(CDispatchServerDlgAutoProxy, HelloSpeaker)
    CString s(bstrMsg);
    pThis->FireHelloEvent(bstrMsg);
}

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

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

  • 帮我分析一下MFC自动化服务器中连接点即CallBack的出错的原因。进来给分,不够可以在给。

相关文章

  • 2017-06-05 Dll类导出的错误在线揭贴
  • 2017-06-04 帮忙啊!牛人们,一个超难问题快进来看
  • 2017-06-04 我用ATl编写一个简单的ActiveX控件,但用vc注册或regsvr32注册时失败0x8007007e,why??急
  • 2017-06-05 父进程不能打开子进程创建的互斥量,但是可以打开其他进程创建的,高手指教!
  • 2017-06-05 如何通过全局鼠标钩子获取其他窗口选中文本内容
  • 2017-06-04 从adocommand赋值给adorecordset有什么区别
  • 2017-06-04 如何在控件中显示控件自己的属性页?高手帮忙啊~~急~急~急
  • 2017-06-04 关于ATL控件
  • 2017-06-04 COM组件注册时,弹出对话框,大家帮忙看看啊啊
  • 2017-06-05 使用导出符号表lib的三种方法。

文章分类

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

最近更新的内容

    • 2vc使用CHtmlEditorCHtmlEdit打开网页后如何搜索查找关键字词跳到查找到的当前位置的问题如何实现??
    • “哪个窗口拥有焦点”和"哪个窗口是活动的”是否等价?
    • 请教一下,我编译IDL的时候出错了。。
    • VS2010BATE2体验问题
    • 选用Javaapplet还是ActiveX开发
    • 请教高人,开发一个插件给某种原有的windows程序增加额外的功能是怎么实现的?
    • 如果使OCX能够自动升级新的高版本?
    • 如何将IStream写入文件及从文件中读出???????加急!!!!!!!!!!
    • 我是个笨蛋,大家告诉我com,com+,dcom到底是怎么回事?怎么做,又什么用处?谢谢了
    • 创建进程的问题

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

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