3,245
社区成员
发帖
与我相关
我的任务
分享
HRESULT hr;
IChat *pChat;
IUnknown *pUnknown;
//组件库初始化
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if(FAILED(hr)){
MessageBox("组件初始化失败!");
return FALSE;
}
//初始化安全设置
hr = CoInitializeSecurity(
NULL,-1, NULL,NULL,
RPC_C_AUTHN_LEVEL_DEFAULT,RPC_C_IMP_LEVEL_IDENTIFY,
NULL, 0, NULL);
if(FAILED(hr)){
MessageBox("初始化安全设置失败!");
return FALSE;
}
//创建对象实例,并返回IUnknown 指针
COSERVERINFO ServerInfo={0,L"10.167.206.69",NULL,0};
MULTI_QI MultiQi={&IID_IUnknown,NULL,NOERROR};
hr=CoCreateInstanceEx(CLSID_Chat,NULL,CLSCTX_REMOTE_SERVER,&ServerInfo,1,&MultiQi);
if(FAILED(hr)){
MessageBox("创建对象实例失败!");
return FALSE;
}
//通过IUnkonwn指针去查询接口指针,返回IChat指针
pUnknown = (IUnknown *) MultiQi.pItf;
hr = pUnknown->QueryInterface(IID_IChat,(void**)&pChat);
if(FAILED(hr)){
MessageBox("没有查找的接口指针!");
return FALSE;
}
class CATLComServerApp : public CWinApp
{
...
}
BOOL CATLComServerApp::InitInstance()
{
if (!InitATL())
return FALSE;
...
}
BOOL CATLComServerApp::InitATL()
{
m_bATLInited = TRUE;
#if _WIN32_WINNT >= 0x0400
HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
#else
HRESULT hRes = CoInitialize(NULL);
#endif
if (FAILED(hRes))
{
m_bATLInited = FALSE;
return FALSE;
}
_Module.Init(ObjectMap, AfxGetInstanceHandle());
_Module.dwThreadID = GetCurrentThreadId();
LPTSTR lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
TCHAR szTokens[] = _T("-/");
BOOL bRun = TRUE;
LPCTSTR lpszToken = _Module.FindOneOf(lpCmdLine, szTokens);
while (lpszToken != NULL)
{
if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
{
_Module.UpdateRegistryFromResource(IDR_ATLCOMSERVER, FALSE);
_Module.UnregisterServer(TRUE); //TRUE means typelib is unreg'd
bRun = FALSE;
break;
}
if (lstrcmpi(lpszToken, _T("RegServer"))==0)
{
_Module.UpdateRegistryFromResource(IDR_ATLCOMSERVER, TRUE);
_Module.RegisterServer(TRUE);
bRun = FALSE;
break;
}
lpszToken = _Module.FindOneOf(lpszToken, szTokens);
}
_Module.UpdateRegistryFromResource(IDR_ATLCOMSERVER, TRUE); //这里进行注册
_Module.RegisterServer(TRUE);
if (!bRun)
{
m_bATLInited = FALSE;
_Module.Term();
CoUninitialize();
return FALSE;
}
hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE);
if (FAILED(hRes))
{
m_bATLInited = FALSE;
CoUninitialize();
return FALSE;
}
return TRUE;
}