我正在尝试下面的示例程序,但由于
IID_IADs
和 IID_IADsContainer
的外部符号均未解析,因此无法链接。
我支持添加什么库来解决这个问题?
#include <windows.h>
#include <activeds.h>
#include <comdef.h>
#include <iostream>
#pragma comment(lib, "Activeds.lib")
int main() {
HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) {
std::cout << "Failed to initialize COM library." << std::endl;
return 1;
}
IADsContainer* pContainer = NULL;
hr = ADsOpenObject(L"LDAP://DC=mydomain,DC=com", NULL, NULL, ADS_SECURE_AUTHENTICATION, IID_IADsContainer, (void**)&pContainer);
if (FAILED(hr)) {
std::cout << "Failed to bind to Active Directory." << std::endl;
CoUninitialize();
return 1;
}
IEnumVARIANT* pEnum = NULL;
hr = ADsBuildEnumerator(pContainer, &pEnum);
if (FAILED(hr)) {
std::cout << "Failed to get enumerator." << std::endl;
pContainer->Release();
CoUninitialize();
return 1;
}
VARIANT var;
ULONG lFetch;
IDispatch* pDispatch = NULL;
IADs* pADs = NULL;
BSTR bstrClass;
while (S_OK == ADsEnumerateNext(pEnum, 1, &var, &lFetch)) {
pDispatch = V_DISPATCH(&var);
hr = pDispatch->QueryInterface(IID_IADs, (void**)&pADs);
if (SUCCEEDED(hr)) {
hr = pADs->get_Class(&bstrClass);
if (SUCCEEDED(hr)) {
if (_wcsicmp(bstrClass, L"computer") == 0) {
BSTR bstrName;
hr = pADs->get_Name(&bstrName);
if (SUCCEEDED(hr)) {
std::wcout << L"Computer: " << bstrName << std::endl;
SysFreeString(bstrName);
}
}
SysFreeString(bstrClass);
}
pADs->Release();
}
VariantClear(&var);
}
ADsFreeEnumerator(pEnum);
pContainer->Release();
CoUninitialize();
return 0;
}
@RemyLebeau 指出了正确的解决方案,设置 Microsoft Visual C++ 6.0 开发环境。
- 指向包含和库目录。选择工具 |选项。单击“目录”选项卡,然后指定 ADSI 的路径 头文件。
- 将 Activeds.h 文件包含在您的项目中。
- 将 Activeds.lib 和 Adsiid.lib 文件添加到链接器输入 你的项目。