以下方法是 DCOM 服务器方法。 COM客户端和服务器运行在不同的WinXP机器上。 COM 客户端调用RegisterClient
方法注册回调接口。问题是QueryInterface
方法失败并显示错误代码E_ACCESSDENIED
。问题的原因可能是什么?
STDMETHODIMP CGEMExtension::RegisterClient(IUnknown** ppGEMExtensionEvents, int* nClientId, int* nResult)
{
HRESULT hRes = (*ppGEMExtensionEvents)->QueryInterface(IID_IGEMExtension,(void**)&pUnknown);
return hRes;
}
当您收到 E_ACCESSDENIED 时,这意味着您遇到权限问题(不要在防火墙或注册上浪费时间 - 前者会引发错误,告诉您服务不可用,后者会告诉您该类未注册或所以)。 COM 依赖于 Windows 权限,因此这是您应该关注的。
在您的情况下,如果我正确理解了这种情况,服务器实际上会调用客户端,以获得正确的接口。为此,运行服务器的用户应该在客户端拥有正确的权限。一些建议:
- 正如 daramarak 建议的那样,让服务器和客户端使用相同的域用户,或者具有相同密码的相同本地用户。
- 在客户端设置这个设置 http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/506.mspx?mfr=true到“经典”。
- 如果客户端已知,则向服务器的用户授予附加权限DCOMCNFG http://msdn.microsoft.com/en-us/library/ms690141%28v=vs.85%29.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)