Всем привет
вот у меня в C++/CLI программе есть такой код
mshtml::IHTMLDocument2^ document = (mshtml::IHTMLDocument2^)webBrowser1->Document->DomDocument;
mshtml::IHTMLTxtRange^ range = (mshtml::IHTMLTxtRange^)
document->selection->createRange();
use range->text ...
почему то ... через раз ... доступ к range->text очень медленный ...
используется для этого дела Microsoft.mshtml.dll
вопрос как мне из mshtml::IHTMLDocument2^ получить COM интерфейс CComPtr<IHTMLDocument2>
и передать его в нативный код ... чтобы там попробовать сделать тоже самое только без
прослойки в виде Microsoft.mshtml.dll ?
спасибо
странно у меня mshtml.dll что ли корявая ... потому что тупить начинает внутри её ...
и что самое странное тупняк происходит точно через раз ... раз быстро получает выделенный текст ...
следующий раз очень медленно ... потом снова быстро ...
вот каллстек в момент когда процессор загружен на 100 % ... Microsoft.mshtml.dll оказалась
ни при чем ... может mshtml.dll заменить ?
ntoskrnl.exe!KiUnlockDispatcherDatabase+0x77
ntoskrnl.exe!KeSetEvent+0x74
ntoskrnl.exe!PspGetSetContextSpecialApc+0x4e
ntoskrnl.exe!KiDeliverApc+0xb3
hal.dll!HalpApcInterrupt+0xc5
mshtml.dll!CTreePos::InternalCompare+0x63
mshtml.dll!CLineBreakCompat::QueryBreaks+0x6b
mshtml.dll!CTreeSaver::LineBreakChar+0x8a
mshtml.dll!CTreeSaver::Save+0x401
mshtml.dll!CRangeSaver::Save+0x145
mshtml.dll!CAutoRange::SaveHTMLToStream+0xa8
mshtml.dll!CAutoRange::GetBstrHelper+0x63
mshtml.dll!CAutoRange::get_text+0x5f
my_app.exe!test_wi+0xf7
System.Windows.Forms.ni.dll+0x212d18
System.Windows.Forms.ni.dll+0x8ba346
System.Windows.Forms.ni.dll+0x77655e
System.Windows.Forms.ni.dll+0x776bc0
System.Windows.Forms.ni.dll+0x7760b9
System.Windows.Forms.ni.dll+0xa649fb
System.Windows.Forms.ni.dll+0x770a36
System.Windows.Forms.ni.dll+0x77a61d
System.Windows.Forms.ni.dll+0x7275d3
System.Windows.Forms.ni.dll+0xa59b66
System.Windows.Forms.ni.dll+0x201d6a
System.Windows.Forms.ni.dll+0x221fd1
System.Windows.Forms.ni.dll+0x1dff66
System.Windows.Forms.ni.dll+0x1f8640
System.Windows.Forms.ni.dll+0x1f85c1
System.Windows.Forms.ni.dll+0x1f849a
USER32.dll!InternalCallWinProc+0x28
USER32.dll!UserCallWinProcCheckWow+0x150
USER32.dll!DispatchMessageWorker+0x306
USER32.dll!DispatchMessageW+0xf
System.Windows.Forms.ni.dll+0x208cce
System.Windows.Forms.ni.dll+0x208937
System.Windows.Forms.ni.dll+0x208781
System.Windows.Forms.ni.dll+0x1c5911
mscorwks.dll+0x1b4c
mscorwks.dll!DllUnregisterServerInternal+0x6195
mscorwks.dll!CoUninitializeEE+0x2e95
mscorwks.dll!CoUninitializeEE+0x2ec8
mscorwks.dll!CoUninitializeEE+0x2ee6
mscorwks.dll!NGenCreateNGenWorker+0x1f53
mscorwks.dll!GetPrivateContextsPerfCounters+0xf466
mscorwks.dll!GetPrivateContextsPerfCounters+0xf9b6
mscorwks.dll!CorExeMain+0x168
mscorwks.dll!CorExeMain+0x98
mscoree.dll!CorExeMain+0x34
KERNEL32.dll!BaseProcessStart+0x23
написал такой тест
boost::timer tt;
pTxtRange->get_text (&bsText);
printf("get_text %f\n", tt.elapsed());
вывод
get_text 0.078000
get_text 9.406000
get_text 0.047000
get_text 9.328000
get_text 0.063000
get_text 9.359000
тоесть через раз он в ~200 раз дольше выполняет эту команду ...
если через браузер открыть этот же документ то он быстро копирует всегда ...
версии mshtml.dll совпадают проверил ...
ничего не понимаю ...