DsGetDomainControllerInfo返回“指向接收数组的指针变量的指针”?我不明白

时间:2013-11-15 20:30:37

标签: c++ arrays winapi pointers

我的大部分经验都是使用C#...所以我还是习惯了C ++。

我正在尝试调用DsGetDomainControllerInfo来获取域中的所有域控制器。以下是该调用的MSDN文档的链接:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms675987(v=vs.85).aspx

第四个参数返回应该在DS_DOMAIN_CONTROLLER_INFO_ *结构数组中的DC数。

我在数组中获得了第一个DS_DOMAIN_CONTROLLER_INFO_ *,但它在第二个上抛出了未处理的异常。最后一个论点是一个无效的** ......我正在努力,但我怀疑这是正确的做法。

这是我的代码:

PDOMAIN_CONTROLLER_INFO logonDomainController;
DsGetDcName(NULL, NULL, NULL, NULL, 0, &logonDomainController);
wstring domCon = logonDomainController->DomainControllerName;
wstring domNam = logonDomainController->DomainName;
HANDLE domHan;
DsBindWithCred(domCon.c_str(), domNam.c_str(), NULL, &domHan);
DWORD count = 0;
DS_DOMAIN_CONTROLLER_INFO_3 *dci[100] = { NULL };
DsGetDomainControllerInfo(domHan, domNam.c_str(), 3, &count, (void**)dci);

for (size_t i = 0; i < count; i++)
{
    wcout << dci[i]->DnsHostName << endl;
}

1 个答案:

答案 0 :(得分:1)

我将文档阅读为:您必须声明DS_DOMAIN_CONTROLLER_INFO_3 *dci;并将其地址作为(VOID**) &dci传递(在结果/“out”参数的意义上),因此dci可以是由被调用者分配..INFO_3数组的基址。您仍然可以使用dci[i]访问数组的元素。

我认为在阅读DsFreeDomainControllerInfo函数的链接文档时会更清楚(它使用与“in”参数相同的指针)。