Исходный текст
//---------------------------------------------------------
// Выполняет команду "Test" над выбранным объектом.
// Если команды нет, создает ее.
//---------------------------------------------------------
// получить команды
CComPtr<ITDMSCommands> pCommands;
CheckError(pApp->get_Commands(&pCommands));
// получить команду "Test"
CComPtr<ITDMSCommand> pCommand;
VARIANT varItem;
varItem.vt = VT_BSTR;
varItem.bstrVal = A2BSTR("Test");
HRESULT hr = pCommands->get_Item(varItem, &pCommand);
if (FAILED(hr))
{
// создать команду "Test"
CheckError(pCommands->Create(&pCommand));
CheckError(pCommand->put_SysName(varItem.bstrVal));
CheckError(pCommand->put_Description(varItem.bstrVal));
CheckError(pCommand->put_Class(tdmView));
CheckError(pCommand->put_Type(tdmVBScript));
BSTR bsCommand = A2BSTR("MsgBox ThisObject.Description\n");
CheckError(pCommand->put_Command(bsCommand));
}
// выбрать объект
CComPtr<ITDMSObject> pObject;
if (SelectObject(&pObject, pApp, NULL))
{
// разрешить выполнение команды над объектами этого типа
CComPtr<ITDMSObjectDef> pObjDef;
CheckError(pObject->get_ObjectDef(&pObjDef));
CComPtr<ITDMSCommands> pObjComs;
CheckError(pObjDef->get_Commands(&pObjComs));
pObjComs->Add(pCommand);
// выполнить команду
CheckError(pApp->ExecuteCommand(varItem.bstrVal, pObject));
VariantClear(&varItem);
}