无法解析的外部符号 IID_IADs?

问题描述 投票:0回答:1

我正在尝试下面的示例程序,但由于

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;
}
winapi active-directory adsi
1个回答
0
投票

@RemyLebeau 指出了正确的解决方案设置 Microsoft Visual C++ 6.0 开发环境

  1. 指向包含和库目录。选择工具 |选项。单击“目录”选项卡,然后指定 ADSI 的路径 头文件。
  2. 将 Activeds.h 文件包含在您的项目中。
  3. 将 Activeds.lib 和 Adsiid.lib 文件添加到链接器输入 你的项目。
© www.soinside.com 2019 - 2024. All rights reserved.