![](/img/trans.png)
[英]Uploading a picture to a Password Protected Directory using libcurl and C++
[英]Get active directory picture using c++ code
我正在使用 JNI 接口使用带有活动目录的 java web 应用程序。 我想获取活动目录用户图片,发现图片存储为八位字节字符串。 我使用 IADsUser 来获取图片的值,但我找不到任何文档或代码如何使用该值。 我想通过 jni 将这些数据发送到 java 在那里我可以渲染图片。 我用来获取图片的代码。
HRESULT GetUserObject()
{
IADsUser* pUser;
CoInitialize(NULL);
CComBSTR path = L"LDAP://WIN-F94H2MP3UJR.Test.local/CN=SomeOne";
path += L",CN=Users,DC=Test,DC=local";
HRESULT hr = ADsOpenObject(path, L"Administrator", L"pass@12",
ADS_SECURE_AUTHENTICATION, // For secure authentication
IID_IADsUser,
(void**)&pUser);
if (FAILED(hr)) { return NULL; }
VARIANT var;
hr = pUser->get_Picture((VARIANT*)&var);
std::string message = std::system_category().message(hr);
std::cout << message << std::endl;
return hr;
}
我用来编写此链接的 Microsoft 文档。 在本文档中,他们指定了正在寻找的获取图片方法。 此处为 hr 打印操作成功完成。 帮助我如何使用这个值,或者至少帮助我打印存储在 c++ 中的 var 中的值。 谢谢你。
我有一个旧的 C++ 项目,我已经从 AD 获取数据,所以我决定尝试一下。 这就是我想出将数据放入字节数组并将其写入文件的方法:
VariantInit(&var);
LONG lBound = 0;
LONG uBound = 0;
if (FAILED(pUser->get_Picture(&var)) ||
FAILED(SafeArrayLock(var.parray)) ||
FAILED(SafeArrayGetLBound(var.parray, 1, &lBound)) ||
FAILED(SafeArrayGetUBound(var.parray, 1, &uBound))) {
//handle failure
}
if (var.vt != VT_EMPTY) {
const char* pData = static_cast<const char*>(var.parray->pvData);
std::ofstream file("picture.jpg", std::ios::binary);
file.write(pData, uBound);
file.close();
SafeArrayUnlock(var.parray);
}
VariantClear(&var);
如果没有图片, vt
属性将为VT_EMPTY
,而VT_ARRAY | VT_UI1
VT_ARRAY | VT_UI1
如果有的话。 数据是SAFEARRAY
。 您需要使用SafeArrayGetLBound
和SafeArrayGetUBound
来获得下限(可能总是0
)和上限(长度)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.