Если у вас есть что добавить к этим вопросам или новые вопросы, то шлите мне их сюда
1. Функция передаёт массив из СОМ компонента написанного на C++ в приложение на ASP.[id(2), helpstring("method GetPositions")] HRESULT GetPositions([out,retval]VARIANT* ret_val); ...... STDMETHODIMP CFindWord::GetPositions(VARIANT* ret_val) { VariantInit( ret_val ); ret_val->vt = VT_ARRAY | VT_VARIANT; SAFEARRAY *psa = NULL; SAFEARRAYBOUND bound; bound.cElements = Array_size; bound.lLbound = 0; psa = SafeArrayCreate(VT_VARIANT,1,&bound); VARIANT* VarArray; ::SafeArrayAccessData( psa, (void **) &VarArray ); for(LONG i = 0; i < Array_size;i++){ VarArray[i].vt = VT_I4; VarArray[i].llVal = Ret_val[i]; } SafeArrayUnaccessData( psa ); ret_val->parray = psa; return S_OK; }наверх.
Пример: IFilterPtr filter = NULL; DWORD flags = 0; WCHAR awcBuffer[4097]; CA2W fn(filename); hr = LoadIFilter(fn.m_psz,NULL,(void**)&filter); if(filter == NULL){ return; } try { hr = filter->Init(0,0,0,&flags); } catch(_com_error &e){ return; } if (SUCCEEDED(hr)) { STAT_CHUNK stat; do{ hr = filter->GetChunk(&stat); if (SUCCEEDED(hr)&& (stat.flags == CHUNK_TEXT)) { HRESULT state_text = 0; do{ ULONG bufsize=4096; state_text = filter->GetText((ULONG*)&bufsize,awcBuffer); awcBuffer[bufsize] = 0; mStream->WriteText(awcBuffer,ADODB::adWriteChar); }while((state_text != FILTER_S_LAST_TEXT)&& (state_text != FILTER_E_NO_MORE_TEXT)&& (state_text != FILTER_E_NO_TEXT)); } }while(FILTER_E_END_OF_CHUNKS != hr); }Для того чтоб достать из html документа определённые теги следует в функции IFilter::Init первый параметр выставить как IFILTER_INIT_APPLY_INDEX_ATTRIBUTES. Далее, метод GetChunk(&stat) будет возвращать текст, который содержится в теге, а в поле stat.attribute.psProperty будет идентификатор тега. Причём тег будет либо помечен определённым ID, либо строкой с определённым именем. Кроме того, весь текст видимый на экране будет обязательно отображён под ID = 0x13(Contents).
Пример (требуется получить текст, который не является ссылкой и не Title): ... hr = LoadIFilter(fn.m_psz,NULL,(void**)&filter); if(filter == NULL){ return; } try { hr = filter->Init( IFILTER_INIT_APPLY_INDEX_ATTRIBUTES,0,0,&flags); } catch(_com_error &e){ return; } if (SUCCEEDED(hr)) { STAT_CHUNK stat; PROPID oldstat = 0; bool href = false; do{ hr = filter->GetChunk(&stat); if(stat.attribute.psProperty.propid != 0x13){ oldstat = stat.attribute.psProperty.propid; if(stat.attribute.psProperty.ulKind == 0){ if(memcmp(stat.attribute.psProperty.lpwstr,L"A.HREF",6*sizeof(OLECHAR)) == 0) href = true; } else { href = false; } continue; } if (SUCCEEDED(hr)&& (stat.flags == CHUNK_TEXT)) { HRESULT state_text = 0; BOOL title_flag = false; do{ ULONG bufsize=4096; state_text = filter->GetText((ULONG*)&bufsize,awcBuffer); awcBuffer[bufsize] = 0; if((oldstat != 0x02) && !href) { if(awcBuffer2[0] != 0){ mStream->WriteText(awcBuffer2,ADODB::adWriteChar); } } wmemcpy(awcBuffer2,awcBuffer,bufsize+1); }while((state_text != FILTER_S_LAST_TEXT)&& (state_text != FILTER_E_NO_MORE_TEXT)&& (state_text != FILTER_E_NO_TEXT)); oldstat = stat.attribute.psProperty.propid; href = false; } }while(FILTER_E_END_OF_CHUNKS != hr); if(oldstat == 0x13){ if(awcBuffer2[0] != 0) mStream->WriteText(awcBuffer2,ADODB::adWriteChar); } } ...наверх.
CListCtrl Sites_list; .... DDX_Control(pDX, IDC_LIST1, Sites_list); Sites_list.InsertColumn(0,_T("Rule"),LVCFMT_LEFT,50); Sites_list.InsertColumn(1,_T("Site"),LVCFMT_LEFT,150); DWORD ExStyle = Sites_list.GetExtendedStyle(); ExStyle |= LVS_EX_FULLROWSELECT; Sites_list.SetExtendedStyle(ExStyle); ....наверх.
identity impersonate="true" userName="registry:HKLM\Software\UEEE\Innm\ASPNET_SETREG,userName" password="registry:HKLM\Software\UEEE\Innm\ASPNET_SETREG,password"1) Не должно быть проблеа после запятой в обоих строчках - ....,userName и ....,password