为什么远程调用总是不成功?
我用VC的ATL向导(选择了Service(exe))生成了一个DCOM服务器,并加入了一个
Simple Object,然后实施了一个最简单的接口函数:
STDMETHODIMP CCSimple::GetString(int iType, BSTR *lpBstr)
{
// TODO: Add your implementation code here
if(lpBstr )
SysFreeString (*lpBstr);
switch(iType)
{
case 0:
*lpBstr = SysAllocString(L"I am a good man");
break;
default:
*lpBstr = SysAllocString (L"you are a bad man");
break;
}
return S_OK;
}
然后我在客户端如下调用:
CoInitialize(NULL);
IClassFactory *pClassFactory =0;
IUnknown *pIkown=0;
ICSimple *lpSub = 0;
COSERVERINFO cos;
cos.dwReserved1 = 0;
cos.dwReserved2 =0;
cos.pAuthInfo = 0;
cos.pwszName =L"10.143.132.180";
if(CoGetClassObject(CLSID_CSimple, CLSCTX_ALL , &cos,IID_IClassFactory, (void**)&pClassFactory)== S_OK)
::MessageBox(NULL,"ok",NULL,MB_OK);
pClassFactory->CreateInstance (NULL,IID_ICSimple,(void**)&pIkown);
pIkown ->QueryInterface (IID_ICSimple,(void **)&lpSub );
CString str;
str = (LPCTSTR)lpSub ->GetString (0);
MessageBox (str);
结果我在本机上可以成功调用,但在远程机器上CoGetClassObject成功,CreateInstance 却失败,到底是为什么啊?
注明:并没有生成代理DLL,正确设置了安全权限。