Исходный текст
//---------------------------------------------------------
// Создает объект любого разрешенного типа в составе
// выбранного объекта с помощью диалога создания объекта.
//---------------------------------------------------------
VARIANT var;
CComPtr<ITDMSObjectDef> pObjDef;
CComPtr<ITDMSObject> pParentObject;
// получить диалог создания объекта
CComPtr<ITDMSDialogs> pDialogs;
CheckError(pApp->get_Dialogs(&pDialogs));
CComPtr<ITDMSCreateObjectDlg> pCreateObjectDlg;
CheckError(pDialogs->get_CreateObjectDlg(&pCreateObjectDlg));
// выбрать объект-контейнер
MessageBox(NULL, "Укажите объект в составе которого будет создан новый объект", "TDMS Example", MB_OK | MB_ICONINFORMATION);
if (SelectObject(&pParentObject, pApp)) {
CheckError(pCreateObjectDlg->put_ParentObject(pParentObject));
// получить первый из разрешенных для создания в этом объекте типов объектов
CComPtr<ITDMSObjectDef> pParentObjDef;
CheckError(pParentObject->get_ObjectDef(&pParentObjDef));
CComPtr<ITDMSObjectDefs> pObjDefs;
CheckError(pParentObjDef->get_ObjectDefs(&pObjDefs));
var.vt = VT_I4;
var.lVal = 0;
CheckError(pObjDefs->get_Item(var, &pObjDef));
}
// получить первый попавшийся тип объекта
else {
CComPtr<ITDMSObjectDefs> pObjDefs;
CheckError(pApp->get_ObjectDefs(&pObjDefs));
VARIANT var;
var.vt = VT_I4;
var.lVal = 0;
CheckError(pObjDefs->get_Item(var, &pObjDef));
}
// установить тип объекта
var.vt = VT_DISPATCH;
CheckError(pObjDef->QueryInterface(IID_IDispatch, (void**)&var.pdispVal));
CheckError(pCreateObjectDlg->put_ObjectDef(var));
VariantClear(&var);
// показать диалог создания объекта
VARIANT_BOOL bResult;
CheckError(pCreateObjectDlg->Show(&bResult));