1

我有一个 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 的发布可能存在问题。

我该怎么做?

4

2 回答 2

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 风格的强制转换。)

于 2012-01-31T17:09:51.267 回答
0

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

CComSafeArray<char> pSafeArgs;

要将其提供给您的 COM 函数,您将执行以下操作:

HRESULT hr = pmyInterface->GetData((LPSAFEARRAY)pSafeArgs);
于 2012-01-31T12:44:23.843 回答