You are right, that was the issue.
I use now CComVariant and CComVarianArray which is simpler.
I finally got something that works.The code is below, I think that it can be useful for someone who, as me, does not know COM.
Immediately calling CoCreateInstance also works.
Code: Select all
GUID teaId;
HRESULT hr = CLSIDFromString(OLESTR("COCO_TEA.PropertyPackManager.1"), (LPCLSID)&teaId);
if (FAILED(hr)) messages::get().error("Cannot find property package id: Error %i", hr);
CComPtr<IDispatch> pGetRes;
hr = pGetRes.CoCreateInstance(teaId);
if (FAILED(hr)) messages::get().error("Cannot instantiate CAPE-OPEN property package manager: Error %i", hr);
CComPtr<ICapeThermoPropertyPackageManager> ppManager;
hr = pGetRes->QueryInterface(__uuidof(ICapeThermoPropertyPackageManager), (LPVOID*)&ppManager);
if (FAILED(hr)) messages::get().error("Cannot get Interface for property package manager: Error %i", hr);
CComVariant propPackages;
hr = ppManager->GetPropertyPackageList(&propPackages);
CComSafeArray <BSTR> propPackagesArray;
propPackagesArray.Attach(propPackages.parray);
printf("Number of property packages %i\n", propPackagesArray.GetCount());
for (int i = 0; i < propPackagesArray.GetCount(); i++){
CComBSTR mElement(propPackagesArray.GetAt(i));
printf("Property package: %i %s\n", i, _com_util::ConvertBSTRToString(mElement.m_str));
}
propPackagesArray.Detach();
pGetRes.Release();
ppManager.Release();
CoUninitialize();
Many thanks for your help!