Хакер писал(а):(ss=ß)?
weiß(белый) - нельзя написать weiss
wissen(знать) - нельзя написать wißen
Правила
Хакер писал(а):(ss=ß)?
- Кодировка, в которой хранятся имена элементов - думаю в WinXP это значения особого не имеет - не встречал какие-либо трудности
Я задал вопрос, который НЕ имеет никакого отношения к SW !
Для начала его(список) мне нужно построить
Зачем нам отвлечённые примеры??? Вы приведите СВОЙ код/алгоритм - без этого мы не можем сказать, что у ВАС тормозит! (гм: или можем?) Если не хотите показывать свой код - так и напишите: "Не покажу!"
А то дурацкий разговор получается: Вы жалуетесь, что код VB тормозит, но категорически обходите предложения на него посмотреть. Поэтому - какой код? Нет никакого кода. Не видим мы никаких тормозов. Всё работает ништяк! Так держать!
Говорите, кодите уже лет 20?
Ой-ой-ой... Что такое это "Ой-ой-ой" ?
А решение на си написано по тому же принципу и действительно работает быстрее на том же кол-ве компонентов?
И ты это видел своими глазами?
А решение на си написано по тому же принципу и действительно работает быстрее на том же кол-ве компонентов?
И ты это видел своими глазами?
void GetModelAssembly(ISldWorks* m_pSldWorks)
{
LPCONFIGURATION pConfiguration = NULL;
LPCOMPONENT pRootComponent = NULL;
LPMODELDOC2 pModelDoc = NULL;
HRESULT hres = S_OK;
long RecurseLevel = 0;
hres = m_pSldWorks->get_IActiveDoc2( &pModelDoc );
// Retrieve model document pointer
if( S_OK != hres || pModelDoc == NULL )
return;
// Get the active configuration and root component
if ( pModelDoc->IGetActiveConfiguration(&pConfiguration) == S_OK )
{
if ( pConfiguration->IGetRootComponent(&pRootComponent) == S_OK )
{
CString MyString;
TraverseChildren(RecurseLevel,&MyString,pRootComponent);
pRootComponent->Release();
// Display the structure in a message box
AfxMessageBox (MyString);
}
pConfiguration->Release();
}
pModelDoc->Release();
}
//////////////////////////////////////////////////////////////////////////
// Function: TraverseChildren
// Arguments: RecurseLevel - Level of recursion
// MyString - Textural record of assembly
// pComponent - Component to traverse
// Return: Number of children
// Description: Perform any operations specific to the component, then
// if the component has children, recursively call
// this function for each child.
//////////////////////////////////////////////////////////////////////////
int TraverseChildren(long RecurseLevel, CString* MyString, LPCOMPONENT pComponent)
{
LPCOMPONENT* pChildren = NULL;
int nChildren;
int i;
BSTR Name;
HRESULT hres = S_OK;
LPMODELDOC pModelDoc = NULL;
// Retrieve the component name
if(RecurseLevel==0)
{
// Special case of top-level components
hres = m_pSldWorks->get_IActiveDoc( &pModelDoc );
if( S_OK == hres || pModelDoc != NULL )
hres = pModelDoc->GetTitle(&Name);
}
else
{
// Get the component name
hres = pComponent->get_Name(&Name);
}
if( S_OK == hres && Name != NULL )
{
CString tempstr;
for( i=1; I<=RecurseLevel; i++)
{
tempstr += " ";
}
CString Tmp(Name);
tempstr += Tmp;
tempstr += "\r\n";
*MyString = *MyString + tempstr;
}
RecurseLevel++;
hres = pComponent->IGetChildrenCount(&nChildren);
// Check if this component has children
if ( S_OK == hres || nChildren > 0 )
{
pChildren = new LPCOMPONENT [nChildren];
hres = pComponent->IGetChildren((LPCOMPONENT**)&pChildren);
if(S_OK == hres)
{
// Recursively traverse the children <= рекурсивный вызов!
for ( i=0; i<nChildren; i++ )
{
TraverseChildren(RecurseLevel,MyString,pChildren[i]);
pChildren[i]->Release();
}
}
delete [] pChildren;
}
RecurseLevel--;
return nChildren;
}
//***
ssv22 писал(а):Traverse Assembly Example (C++ COM)
This example shows how to traverse an assembly using the Component2 object. The method Component2::IGetChildren returns an array, so this code must be used in an in-process DLL. Otherwise, use the method Component2::GetChildren that returns a VARIANT.
Денис писал(а):Я тут погуглил. Говорят, будет быстрее, если массив сначала отсортировать, а уж потом удалять дубликаты. (Насчет того, чтобы выгружать данные в массив из контрола, это даже не обсуждается.)
alibek писал(а):Нормальный совет дали давно, не понимаю, почему его еще не использовали.
Что там изучать то? Метод Add и все! Если при добавлении ошибка, то значит путь в коллекции уже есть.Денис писал(а):alibek писал(а):Нормальный совет дали давно, не понимаю, почему его еще не использовали.
Потому шо у человека (ssv22) не хватает времени, изучить коллекции, что это такое и с чем это едят. ИМХО.
Сейчас этот форум просматривают: SemrushBot и гости: 19