描述:
我在使用DCOM方式调用远程的组件
创建和初始化都成功了,就是调用组件的接口就出现问题
到底是怎么回事???
UpdateData();
HRESULT hr;
hr = CoInitializeSecurity(NULL, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_NONE, RPC_C_IMP_LEVEL_IDENTIFY, NULL, EOAC_NONE, NULL);
if (FAILED(hr)) {
if (RPC_E_TOO_LATE != hr)
{
if (RPC_E_NO_GOOD_SECURITY_PACKAGES == hr) {
AfxMessageBox("初始化安全失败!无法连接远程组件,返回值\n RPC_E_NO_GOOD_SECURITY_PACKAGES");
}
else if (RPC_E_REMOTE_DISABLED == hr ) {
AfxMessageBox("初始化安全失败!无法连接远程组件,返回值\n RPC_E_REMOTE_DISABLED");
}
else
AfxMessageBox("初始化安全失败!无法连接远程组件,原因待查");
return;
}
}
COSERVERINFO si;
MULTI_QI qi;
CString strComputer = m_sServerIP;
if (strComputer.IsEmpty()) {
AfxMessageBox("IP地址不能为空!");
return;
}
CComBSTR bstr = strComputer;
LPWSTR name = bstr.m_str;
si.dwReserved1 = 0;
si.pwszName = name;
// si.pAuthInfo = m_bAccess ? &auth : NULL;
si.pAuthInfo = NULL;
si.dwReserved2 = 0;
IID iid = __uuidof(IMonitorForAgent1);
qi.pIID = &iid;
qi.pItf = NULL;
hr = CoCreateInstanceEx(__uuidof(MonitorForAgent1), NULL, CLSCTX_SERVER, &si, 1, &qi);
if (FAILED(hr)) {
if (REGDB_E_CLASSNOTREG == hr)
{
AfxMessageBox("创建组件对象失败,请检查服务器是否有MonitorForAgent组件!\n返回值 REGDB_E_CLASSNOTREG");
}
else if (CLASS_E_NOAGGREGATION == hr)
{
AfxMessageBox("创建组件对象失败,请检查服务器是否有MonitorForAgent组件!\n返回值 CLASS_E_NOAGGREGATION");
}
else if (CO_S_NOTALLINTERFACES == hr)
{
AfxMessageBox("创建组件对象失败,请检查服务器是否有MonitorForAgent组件!\n返回值 CO_S_NOTALLINTERFACES");
}
else if (E_NOINTERFACE == hr) {
AfxMessageBox("创建组件对象失败,请检查服务器是否有MonitorForAgent组件!\n返回值 E_NOINTERFACE");
}
else
{
CString err;
err.Format("%ld",hr);
AfxMessageBox("错误待查!Error:"+err );
}
return;
}
IMonitorForAgent1* m_pIRemoteControl = (IMonitorForAgent1 *)qi.pItf;
BSTR bstr1;
hr = m_pIRemoteControl->GetAllAgentGroups(&bstr1);
if (FAILED(hr)) {
CString err;
err.Format("%ld",hr);
AfxMessageBox("调用GetAllAgentGroups接口失败!错误待查!Error:"+err );
::SysFreeString(bstr1);
m_pIRemoteControl->Release();
return;
}
CString temp(bstr1);
m_sReturn = temp;
UpdateData(FALSE);
::SysFreeString(bstr1);
m_pIRemoteControl->Release();

