CComSafeArray使用

时间:2012-01-31 09:28:11

标签: c++ mfc safearray

我有一个Com功能:

GetData (SAFEARRAY ** pRetVal)

我有以下代码:

SAFEARRAY *ppData = NULL;       
hr = pmyInterface->GetData( &ppData );
CComSafeArray<IUnknown*> pSafeArgs;
pSafeArgs.Attach( ppData );

我必须更改它,删除ppData,并删除Attach命令。

它应该是这样的:

CComSafeArray<IUnknown*> pSafeArgs;
hr = pmyInterface->GetData( ((SAFEARRAY**)&pSafeArgs )))

但这不起作用。可能是CComArray发布的问题。

我该怎么做?

2 个答案:

答案 0 :(得分:0)

通常在创建CComSafeArray时,您将指定将在其中保存的数据类型,例如:

CComSafeArray<char> pSafeArgs;

要将此功能提供给COM功能,您可以执行以下操作:

HRESULT hr = pmyInterface->GetData((LPSAFEARRAY)pSafeArgs);

答案 1 :(得分:0)

尝试使用CComSafeArray::GetSafeArrayPtr()

// Substitute T with the actual type of items 
// in your SAFEARRAY, e.g. CComSafeArray<BYTE>
CComSafeArray<T> safeArgs;

hr = pmyInterface->GetData( safeArgs.GetSafeArrayPtr() );

(一般来说,你应该避免在C ++代码中使用C风格的强制转换。)