SetWindowText глючит
От: m11  
Дата: 04.11.22 11:26
Оценка:
Есть древнее приложение в нем rtf окно и вот обнаружилось что если делать SetWindowTextW в этот контрол большого текста(где-то 2мб в ascii соотверствено это где-то 4мб в wide char) то оно зависает — обрабатывает на довольно большой срок секунд 15-50. Причем это только если использовать Borland С++. Если же делать MSVC то работает быстро как и раньше.
Куда копать?
Re: SetWindowText глючит
От: Pavel Dvorkin Россия  
Дата: 04.11.22 12:09
Оценка:
Здравствуйте, m11, Вы писали:

m11>Есть древнее приложение в нем rtf окно и вот обнаружилось что если делать SetWindowTextW в этот контрол большого текста(где-то 2мб в ascii соотверствено это где-то 4мб в wide char) то оно зависает — обрабатывает на довольно большой срок секунд 15-50. Причем это только если использовать Borland С++. Если же делать MSVC то работает быстро как и раньше.

m11>Куда копать?

Попробовать заслать этот текст минуя борландовские классы, то есть чисто через WinAPI. Получить HWND и по нему.
With best regards
Pavel Dvorkin
Re: SetWindowText глючит
От: Mr.Delphist  
Дата: 04.11.22 12:13
Оценка:
Здравствуйте, m11, Вы писали:

m11>Причем это только если использовать Borland С++. Если же делать MSVC то работает быстро как и раньше.


В смысле, если скомпилить из сырцов на Борланде и MSVC? Я бы тогда смотрел на то, какой контрол фактически создаётся в приложении, какие опции его создания. Подозреваю, что Borland создаёт старую версию контрола, что-то типа 2.x, где нет поддержки виртуализации контента (поэтому по факту строится полная DOM-модель, делается её offscreen-рендеринг и т.п., что и занимает лишнее время и память).

Куда смотреть:
* window spy — для изучения контрола
* Dependency walker — для определения списка используемых DLL

https://learn.microsoft.com/en-us/windows/win32/controls/about-rich-edit-controls
Re[2]: SetWindowText глючит
От: m11  
Дата: 04.11.22 12:28
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

m11>>Есть древнее приложение в нем rtf окно и вот обнаружилось что если делать SetWindowTextW в этот контрол большого текста(где-то 2мб в ascii соотверствено это где-то 4мб в wide char) то оно зависает — обрабатывает на довольно большой срок секунд 15-50. Причем это только если использовать Borland С++. Если же делать MSVC то работает быстро как и раньше.

m11>>Куда копать?

PD>Попробовать заслать этот текст минуя борландовские классы, то есть чисто через WinAPI. Получить HWND и по нему.


Как бы там от борланда компилятор а так чисто WinAPI SetWindowTextW.
Re[3]: SetWindowText глючит
От: Pavel Dvorkin Россия  
Дата: 04.11.22 12:31
Оценка:
Здравствуйте, m11, Вы писали:

m11>Как бы там от борланда компилятор а так чисто WinAPI SetWindowTextW.


Тогда, может быть, прав Mr.Delphist.
Spy и вперед. Или смотри документацию, что там за контрол.
With best regards
Pavel Dvorkin
Re[2]: SetWindowText глючит
От: m11  
Дата: 04.11.22 12:38
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

m11>>Причем это только если использовать Borland С++. Если же делать MSVC то работает быстро как и раньше.


MD>В смысле, если скомпилить из сырцов на Борланде и MSVC? Я бы тогда смотрел на то, какой контрол фактически создаётся в приложении, какие опции его создания. Подозреваю, что Borland создаёт старую версию контрола, что-то типа 2.x, где нет поддержки виртуализации контента (поэтому по факту строится полная DOM-модель, делается её offscreen-рендеринг и т.п., что и занимает лишнее время и память).


там можна собрать как в Borland С++ так и в MSVC(немного глючно). обычный котнрол CreateWindow("RichEdit50W" LoadLibrary("msftedit.dll"); Еше там версии детектятся LoadLibrary("riched20.dll"); LoadLibrary("RICHED32.DLL"); Оно и под Win95 запустится наверно лол.

MD>Куда смотреть:

MD>* window spy — для изучения контрола
MD>* Dependency walker — для определения списка используемых DLL

Думаю там нада что-то сделать с манифестом ибо с MSVC его нету.
Re[3]: SetWindowText глючит
От: m11  
Дата: 05.11.22 15:28
Оценка:
Здравствуйте, m11, Вы писали:


MD>>Куда смотреть:

MD>>* window spy — для изучения контрола
MD>>* Dependency walker — для определения списка используемых DLL

m11>Думаю там нада что-то сделать с манифестом ибо с MSVC его нету.


Ну да манифест отключаеш и все работает...
А теперь вопрос что прописать в манифесте-то? Чтобы последнию версию использовало под Win10/11.
Там код для XP а для win11 что прописывать?

      <dependency>
         <dependentAssembly>
            <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" publicKeyToken="6595b64144ccf1df" language="*" processorArchitecture="*" />
         </dependentAssembly>
      </dependency>


И что такое ClickOnce — это прописываеш для него манифест и антивирус будет доверять файлу?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.