How to build a SAFEARRAY of pointers to VARIANTs?

Serge Weinstock picture Serge Weinstock · Nov 25, 2009 · Viewed 13.8k times · Source

I'm trying to use a COM component with the following method:

HRESULT _stdcall Run(
    [in] SAFEARRAY(BSTR) paramNames,
    [in] SAFEARRAY(VARIANT *) paramValues
    );

How can I create in C/C++ the paramValues array?

Answer

Anonymous Coward picture Anonymous Coward · Jun 3, 2011

Adding to the answers above for reference by future readers: In IDL, SAFEARRAY(...) means a pointer to an array descriptor. But in C++, SAFEARRAY means an array descriptor. So IDL's SAFEARRAY(...) is really C++'s SAFEARRAY *. This confused me to no end. To make things even more interesting, VB always passes arrays by reference. So VB's () As Long is SAFEARRAY<int32_t> ** in C++. (I don't know if there actually is a commonly used header that allows you to specify the type as a template parameter, but I inserted it for clarity.)