使用APipeCom连接点技术实现即时通讯_第1页
使用APipeCom连接点技术实现即时通讯_第2页
使用APipeCom连接点技术实现即时通讯_第3页
使用APipeCom连接点技术实现即时通讯_第4页
使用APipeCom连接点技术实现即时通讯_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、使用APipeCom连接点技术实现即时通讯 -VC6开发实例文档说明本文档是对所附属的源代码的补充说明。包含在AMVC文件夹中的项目的主题,是如何使用APipeCom这个组件,实现类似于Activesoft公司的即时通讯软件Active Message 的收发消息功能。当然,使用者也可以使用APipeCom实现更多的功能,例如收发附件,搭建网络游戏平台等等。什么是APipeComAPipeCom是恒创软件公司开发的一个具有网络通信功能的组件,利用它能方便快捷地开发出需要网络通信功能的程序。使用APipeCom的连接点技术,开发人员就根本不必要研究更多的网络Socket底层编程原理,只要有一份A

2、PipeCom的使用说明文档,就可以快速便捷的开发出网络通讯软件。APipeCom使用实例说明本文档所附属的源码,是使用APipeCom在VC6开发环境中实现网络即时通讯,实现了Active Message 的收发消息功能。1.APipeCom组件注册APipeCom是一个Dll组件,执行下面命令即可注册:regsvr32 "D: APipeCom.dll"2.在VC项目中添加一个ATL对象,实现接口。右键单击项目视图区要使用APipeCom组件的项目,选择菜单命令“NEW ATL OBJECT”,首先要使项目提供ATL支持,单击确定。再次选择菜单命令“NEW ATL OB

3、JECT”,选择Object,SimpleObject,单击NEXT,填写一个对象名称,单击确定。这时候项目视图区会增加一个ATL对象,右键单击,选择菜单命令“Implement Interface”,在弹出的类型库中选择APipeCom1.0 Type Library,单击确定,在弹出的接口列表中选择IAMCPrsAddIn,即可实现接口。3创建m_ptrAMSession对象并且登录下面的代码创建了一个m_ptrAMSession对象用于发送消息。IAMConsolPtrIConsolePtr;IAMLoginInfoPtrILoginInfoPtr;tryif (!IConsolePtr

4、.GetInterfacePtr ()HRESULThr;hr = IConsolePtr.CreateInstance( _T("APipeCom.AMConsol") );if (FAILED (hr)_com_error error (hr);CString strError = error.ErrorMessage ();/AfxMessageBox("Create the AMSession object failed!");return;/IConsolePtr->AddRef();catch (_com_error& e)_b

5、str_t bstrtError = e.Description();AfxMessageBox(bstrtError);return ;tryif (!ILoginInfoPtr.GetInterfacePtr ()HRESULThr;hr = ILoginInfoPtr.CreateInstance( _T("APipeCom.AMLoginInfo") );if (FAILED (hr)_com_error error (hr);CString strError = error.ErrorMessage ();/AfxMessageBox("Create t

6、he AMSession object failed!");return ;/ILoginInfoPtr->AddRef();ILoginInfoPtr->put_LoginName( CComBSTR(strLoginName) );ILoginInfoPtr->put_Password( CComBSTR(strPassWord) );ILoginInfoPtr->put_ServerPort( 5001 );catch (_com_error& e)_bstr_t bstrtError = e.Description();AfxMessageBo

7、x(bstrtError);return ;IAMCPrsAddIn*pDisp = NULL;CComObject< CMsg > *m_pMsger;HRESULT hr = CComObject< CMsg >:CreateInstance( &m_pMsger );if (FAILED (hr)CString strMessage = _T("bad");/strMessage.LoadString(IDS_AMPIPEINIT);AfxMessageBox(strMessage);m_pMsger->QueryInterfac

8、e( IID_IDispatch, (void *)&pDisp );if( pDisp = NULL )return;if ( m_ptrAMSession.GetInterfacePtr() )long nResult;m_ptrAMSession->CloseSession( &nResult );m_ptrAMSession.Release();/-/ 连接/-hr = IConsolePtr->CreateSession( ILoginInfoPtr, pDisp, &m_ptrAMSession );if (FAILED (hr)return;l

9、ongnTrID;hr = m_ptrAMSession->ChangeStatus(AM_USERSTATUS_NLN, &nTrID);pDisp->Release();ILoginInfoPtr->put_Server( CComBSTR(strServerName) );ILoginInfoPtr->put_ServerPort( 5001 );catch (_com_error& e)_bstr_t bstrtError = e.Description();AfxMessageBox(bstrtError);return ;IAMCPrsAdd

10、InPtrpDisp ;CComObject< CMsg > *m_pMsger;HRESULT hr = CComObject< CMsg >:CreateInstance( &m_pMsger );if (FAILED (hr)CString strMessage = _T("bad");/strMessage.LoadString(IDS_AMPIPEINIT);AfxMessageBox(strMessage);m_pMsger->QueryInterface( IID_IDispatch, (void *)&pDisp

11、 );if( pDisp = NULL )return;if ( m_ptrAMSession.GetInterfacePtr() )long nResult;m_ptrAMSession->CloseSession( &nResult );m_ptrAMSession.Release();/-/ 连接/-hr = IConsolePtr->NewSession( &m_ptrAMSession );/-/订阅消息类型/-m_ptrAMSession->AddMsgMap( (_bstr_t)_T( "SYSMSG" ), (_bstr_t

12、)_T( "" ), 0, (_bstr_t)_T( "" ), 0 );m_ptrAMSession->AddMsgMap( (_bstr_t)_T( "MSG" ), (_bstr_t)_T( "GEN" ), 0, (_bstr_t)_T( "" ), 0 );if (FAILED (hr)if (FAILED (hr)return;m_ptrAMSession->SingIn( ILoginInfoPtr, m_pMsger , &lReturn );3.消息处理使用

13、接口函数实现与服务器的消息交互。STDMETHODIMP CMsg:OnAMNtyReceive(IAMSysMsg * pSMsg)CComBSTRbszMethod;CStringstrMethod;pSMsg->get_Method(&bszMethod);strMethod = bszMethod;/-/获得在线人员/-if (strMethod = "NLN")CAMMain*AMMainDlg = NULL;AMMainDlg = (CAMMain *)AfxGetApp()->GetMainWnd();if (!AMMainDlg)return E_POINTER;CComBSTRbszLoginName, bszUserName;CStringstrLoginName,strUserName;pSMsg->GetParamStr( 2, &bszLoginName );pSMsg->GetParamStr( 3, &bszUserName );strLoginName = bszLoginName;strUserName = bszUserName;HTREEITEM hRoot = NULL;/-/添加到一个树视图中/-hRoot = AMMainDlg->m_ctlTree

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论