- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个问题,关于何时需要使用 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/
我知道 SafeArrayAccessData 也进行锁定/解锁,但没关系,我只想知道它是否会返回不同于 pvData 的指针。 例如,此代码永远不会触发断言(我可以在测试中看到): SafeArra
我有一个问题,关于何时需要使用 SafeArrayAccessData 来锁定由托管代码传递的 SAFEARRAY。这是我们的代码。 VARIANT 由托管代码通过字符串数组传递。在代码审查期间,有人
我是一名优秀的程序员,十分优秀!