【发布时间】:2019-05-21 20:56:24
【问题描述】:
我在使用远程计算机上的服务中的 WinNT 提供程序从 ADsOpenObject() 获取 IADsContainer 对象时遇到问题。
我已经能够让代码在以下情况下工作,除了数字 4
- 我的应用程序部署在它所连接的同一台机器上(本地主机)。
- 我的应用程序作为本地服务部署在它所连接的同一台计算机上 (localhost)。
- 我的应用程序部署在远程计算机上,它通过提供 IP 进行连接。
- 我的应用程序作为本地服务部署在远程计算机上,并通过提供 IP 进行连接。
#include <iostream>
#include <Adshlp.h>
#include <comdef.h>
IADsContainer* container = nullptr;
HRESULT hres = ADsOpenObject( L"WinNT://192.168.1.30", L"Administrator", L"someAdminPass", ADS_SECURE_AUTHENTICATION | ADS_READONLY_SERVER, IID_IADsContainer, (void**)&container );
if( SUCCEEDED(hres) )
{
// do stuff with the container object
}
else
{
_com_error err( hres );
LPCTSTR errMsg = err.ErrorMessage();
std::wcout << errMsg;
}
我希望 hres 是 S_OK 和有效的“容器”指针,但我只得到带有错误字符串“未指定错误”的 E_FAIL
【问题讨论】:
-
S_FALSE是成功代码。您是如何以及从何处获得“错误字符串'未指定的错误'”? -
“myUser”是否包含域名,ADsOpenObject 表示:此字符串应始终采用“
/ ”格式以避免歧义。 -
正如@IInspectable 所说,
SUCCEEDED(S_FALSE )= true。提供真实的错误信息,或者真实的代码。 -
对于 S_FALSE 的混淆,我深表歉意。值是 E_FAIL,我做了一些错误的复制/粘贴...我还更新了连接字符串,以了解我使用它的方式。我没有指定用户名,也不应该需要它,因为我使用“容器”对象来获取不同用户的信息。 @DrakeWu-MSFT 使用 _com_error 对象获取错误字符串,如 else 情况所示。
-
我的意思是
ADsOpenObject的第二个参数,我不能在我的身上产生这个问题。