Arc*_*her 2 c++ com variant safearray
我有一个关于何时需要使用 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
}
// ...
}
Run Code Online (Sandbox Code Playgroud)
好吧,总是 :) 您需要它来获取对数组内容的引用。
但是您使用了一个友好的 C++ 包装类。CComSafeArray<> 模板已经为你做了这件事,所以你不应该帮忙。它在 Attach() 方法中使用 SafeArrayLock(),它也像 SafeArrayAccessData() 一样返回指向数组内容的指针。并使用其析构函数自动解锁,它会在您的方法结束时运行。否则锁定可确保数组访问是线程安全的,并且在您访问它时不能被删除。在您现有的代码中几乎没有这种危险,但这完全符合自动化的安全胜于抱歉的原则。
归档时间: |
|
查看次数: |
3346 次 |
最近记录: |