gpt4 book ai didi

c++ - 何时使用 SafeArrayAccessData 锁定 SAFEARRAY

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:13 29 4
gpt4 key购买 nike

我有一个问题,关于何时需要使用 SafeArrayAccessData 来锁定由托管代码传递的 SAFEARRAY。这是我们的代码。 VARIANT 由托管代码通过字符串数组传递。在代码审查期间,有人建议使用 SafeArrayAccessData/SafeArrayUnAccessData。但他不确定为什么以及有什么好处。你能分享一些你的经验吗?谢谢!

STDMETHODIMP Base::Method1(VARIANT values, VARIANT_BOOL result)
{
CComSafeArray<BSTR> ids;
ids.Attach(values.parray);

unsigned int size = ids.GetCount();
for(unsigned int i = 0; i < size; ++i)
{
// use ids[i] here
}
// ...
}

最佳答案

好吧,总是 :) 您需要它来获取对数组内容的引用。

但是您使用了友好的 C++ 包装器类。 CComSafeArray<> 模板已为您完成此操作,因此您无需提供帮助。它在 Attach() 方法中使用 SafeArrayLock(),它也像 SafeArrayAccessData() 一样返回指向数组内容的指针。并使用其析构函数自动解锁,它在您的方法结束时运行。以其他方式锁定可确保数组访问是线程安全的,并且在您访问它时不会被删除。在您现有的代码中几乎没有这种危险,但这完全符合自动化的安全原则。

关于c++ - 何时使用 SafeArrayAccessData 锁定 SAFEARRAY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17229106/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com