|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
11-Апр-24 18:18
(1 год 5 месяцев назад)
Эти ссылки студия дает, по нажатию в коде F1. Возможно эта версия Delphi не окончательный релиз?
|
|
KostyantynKo
  Стаж: 15 лет 3 месяца Сообщений: 1629
|
KostyantynKo ·
11-Апр-24 22:08
(спустя 3 часа)
Разделы справки для RAD Studio 12.1 https://docs.embarcadero.com/products/rad_studio/Athens/Athens-Lib-en.zip
Просто скопируйте файлы *.chm в целевую папку "..\Embarcadero\Studio\23.0\Help\Doc\" https://docs.embarcadero.com/products/rad_studio/Athens/Athens-CHM-en.zip
Athens-CHM-en.chm необходимо переименовать в " ..\Embarcadero\Studio\23.0\Help\Doc\topics.chm"
|
|
madnomad
Стаж: 17 лет 3 месяца Сообщений: 64
|
madnomad ·
13-Апр-24 22:15
(спустя 2 дня, ред. 14-Апр-24 13:38)
error404ru писал(а):
86122961
что-то там ни одного бага нет, абсолютно пусто
Что-то там не в порядке, очевидно.
Но как именно оно связано с аккаунтом — не представляю.
Я аккаунт на embt.atlassian.net создал новый: вводил email, задавал пароль. Правда, на этом же email у меня есть старый аккаунт embarcadero.com. Не знаю...
У меня показывает все тикеты:
elephantxp писал(а):
86126717
Эти ссылки студия дает, по нажатию в коде F1. Возможно эта версия Delphi не окончательный релиз?
Как будто они сами знают, окончательный он или нет. 
Если серьёзно, я не помню, чтобы в старых версиях ссылки на доки включали что-то ещё, детализирующее релиз, кроме имени версии ("Athens", в данном случае). Т.е., по идее, здесь между "Athens" и "en" (или вместо "Athens") ничего не должно быть типа "Update1" или "12.1".
Я подозреваю, что в итоговый код некоторых ссылок просто влезло что-то из окружения для разработки, вместо релизного.
P.S. Вот и последнее сообщение KostyantynKo указывает на то же — в ссылке указано только "Athens":
|
|
Hunter1972
Стаж: 20 лет 4 месяца Сообщений: 193
|
Hunter1972 ·
14-Апр-24 11:46
(спустя 13 часов)
Люди подскажите ссылку на UniDac с исходниками последней версии
|
|
temp128
 Стаж: 16 лет 5 месяцев Сообщений: 478
|
temp128 ·
15-Апр-24 09:25
(спустя 21 час, ред. 15-Апр-24 10:20)
temp128 писал(а):
86126268Я, тут, попробовал зайти зо старым email ( он в данный момент не сопоставлен с учетной записью на quality.embarcadero.com , хотя когда-то был ), так вот, выглядит всё как у Вас ! ( нет Embarcadero Customers ). Видимо действительно новую учетную запись создали ! Теперь меня там двое - как говорится " ... и тебя вылечат" .
Это я делал в четверг, а в понедельник уже отображается группа Embarcadero Customers и видны отчеты, созданные другими людьми.
madnomad писал(а):
86136874Что-то там не в порядке, очевидно.
Но как именно оно связано с аккаунтом — не представляю.
Я аккаунт на embt.atlassian.net создал новый: вводил email, задавал пароль. Правда, на этом же email у меня есть старый аккаунт embarcadero.com. Не знаю...
Не хотел сюда политику тащить, но ... Заходите на https://embt.atlassian.net через Tor / Proxy / VPN, т.к, эти педики пишут " We stand with Ukraine" и блокируют аккаунт, если вы зашли с РФ, да и Tor настраивайте, чтобы не выходить из РФ ( в torrc ) :
Код:
ExcludeExitNodes {ru}
|
|
KostyantynKo
  Стаж: 15 лет 3 месяца Сообщений: 1629
|
KostyantynKo ·
15-Апр-24 10:27
(спустя 1 час 2 мин.)
temp128 писал(а):
86142562Не хотел сюда политику тащить
Согласен... Политика - трансформаторная будка, "Под Напряжением опасно для жизни".
Пожалуйста Всем! Всем! Всем!, не пишите ничего политического, никаких лозунгов а то еще тему могут закрыть.
Просьба быть осторожными
Спасибо.
|
|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
15-Апр-24 17:56
(спустя 7 часов, ред. 15-Апр-24 17:56)
Обнаружил, что KonopkaControls отображаются нормально в HPDPI при запуске приложения из под среды. И криво масштабираются при запуске не из под среды. Явно не PerMonitor2. Колдовал, колдовал, пока думаю, что KonopkaControls нужны новые. Может есть у кого-то реально под D12, а не адаптированные нашими руками старая версия?
И с EhLib тоже самое
|
|
madnomad
Стаж: 17 лет 3 месяца Сообщений: 64
|
madnomad ·
15-Апр-24 19:52
(спустя 1 час 56 мин.)
elephantxp писал(а):
86144227отображаются нормально в HPDPI при запуске приложения из под среды. И криво масштабираются при запуске не из под среды.
А для IDE, случайно, не настроена совместимость с HDPI в свойствах ярлыка/приложения? Это может давать как раз подобное различие в поведении.
|
|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
16-Апр-24 01:04
(спустя 5 часов, ред. 16-Апр-24 01:04)
madnomad писал(а):
86144665
elephantxp писал(а):
86144227отображаются нормально в HPDPI при запуске приложения из под среды. И криво масштабираются при запуске не из под среды.
А для IDE, случайно, не настроена совместимость с HDPI в свойствах ярлыка/приложения? Это может давать как раз подобное различие в поведении.
Конечно настроено. Но это конекретное поведение IDE, если посмотреть на bds.exe, видно, что оно не врубает поддержку HIDPI путем манифеста. Она это программно делает, по одному из ключей запуска. Выяснилось кстати, что если вы запускаете Delphi по ярлыку, то в ярлыке прописан ключ запуска с поддрежкой IDE HIDPI. А если запускаете по двойному клику на каком-нибудь droj - стартанет без этого ключа и соответственно anware. Сюрприз на сюрпризе. Многое меняется в этом мире, одно остается неизменно - глюки у Embarcadero  Короче, компоненты тут не причем. Все дело в том, что для Delphi проектов недостаточно просто сделать манифест с соответствующим обявлением поддержки HIDPI. Надо еще написать в коде в самом начале файла проекта что-то типа
Код:
if (TOSVersion.Major>=10) and (TOSVersion.Build>=1703) then
SetThreadDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2);
но это не решает всех проблем и отличие в отображении программы, запущенной из IDE и самостоятельно  И ведь суки нигде ничего не написано :(((
И нужен и манифест, и эта хрень. Хотя на сайте Embarcadero утверждается обратное. Пишут, что никаких вызовов ничего делать не надо категорически, достаточно только манифеста. Что-то намудрили в VCL опять. Микрософт тоже говорит, что ничего вызывать не нужно, только манифест. Ан нет.
Кстати, на 4K мониторе невизуальные компоненты прыгают только в путь, легко ускакать могут в космос
|
|
KostKent
Стаж: 9 лет 10 месяцев Сообщений: 1
|
KostKent ·
16-Апр-24 11:56
(спустя 10 часов)
" на 4K мониторе невизуальные компоненты прыгают только в путь, легко ускакать могут в космос "
я был уверен, что в 12 версии этот баг исправят
так и не дождался
есть идеи как это победить ?
|
|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
17-Апр-24 03:28
(спустя 15 часов, ред. 17-Апр-24 03:28)
KostKent писал(а):
86146796" на 4K мониторе невизуальные компоненты прыгают только в путь, легко ускакать могут в космос "
я был уверен, что в 12 версии этот баг исправят
так и не дождался
есть идеи как это победить ?
Подозрения, что что-то не так с компонентами оказалось ложным. Все проблемы были из за TotalCommander. При запуске приложения из проводника вся отрисовка всех компонентов работает корректно в соответствии с настройками манифеста или вызова соответствующих методов WinAPI, которые рулят режимами отображения. При старте из под TotalCommander все идет к чертям. Судя по всему процессу нельзя выставить DPI_AWARENESS выше процесса предка. Жаль, что коммандер не дает себе ресурсы подменить, проверят себя зараза на изменение. Судя по всему если бы ему немного подкорректировать манифест, все бы было хорошо.
по поводу прыжков компонент:
в принципе с этими прыжками можно жить. Надо при открытии формы сразу ее сохранить, тогда компоненты встают на свои первоначальные места. У кого монитор не HiDpi, все нормально вроде.
Думаю надо сюда смотреть https://www.uweraabe.de/Blog/2023/11/20/more-on-designing-in-high-dpi/ Скорее всего это либо поможет, либо немного допилив точно поможет. Надо будет поковырять.
|
|
KostyantynKo
  Стаж: 15 лет 3 месяца Сообщений: 1629
|
KostyantynKo ·
18-Апр-24 06:39
(спустя 1 день 3 часа)
Info: RAD Studio 12.1 Athens Patch 1 Available
CRC32:"44ce5cca"
MD5: "4fa7d1e1539245f6fb7b7125e74bf725"
SHA-1:"42aa44968781ba54d662ba674cf766b0dd6838ca"
R121.patch1-20240416-2.zip 505 MB (530,024,502 bytes)
|
|
snegsever
 Стаж: 15 лет 3 месяца Сообщений: 66
|
snegsever ·
18-Апр-24 10:12
(спустя 3 часа)
Спасибо! Но обращаю внимание - в батнике прописано неверное имя зип-файла, видно взят от прошлой версии и не исправлен.
|
|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
18-Апр-24 18:55
(спустя 8 часов)
спасибо!
И как всегда, они правят не те ошибки. Хотя кому-то на этом свете повезло
|
|
temp128
 Стаж: 16 лет 5 месяцев Сообщений: 478
|
temp128 ·
18-Апр-24 19:39
(спустя 43 мин.)
KostyantynKo спасибо !
Вот ушлепки  - опять крячить coreide290.bpl пришлось. Обновил старый пост - см тут.
|
|
KostyantynKo
  Стаж: 15 лет 3 месяца Сообщений: 1629
|
KostyantynKo ·
18-Апр-24 21:11
(спустя 1 час 32 мин., ред. 19-Апр-24 02:11)
Мне кажется, что РАД Студия в наши дни начинается с какого то выживания. Наверно сами разработчики утратили интерес или устали от своего детища. Неужели, у них нету Quality Check  тестеров?... Отправил им письмо, что-бы патч поправили на правильное имя файла в батниках. Надеюсь, поправят 
Сквозь  (зубы) ответили и  (радостно) извинились.
Похоже много разработчиков об этом писали.
|
|
hattab_ali
Стаж: 17 лет 3 месяца Сообщений: 177
|
hattab_ali ·
19-Апр-24 01:08
(спустя 3 часа)
KostyantynKo
Выпустить хотфикс для патча... это так по Эмбаркадеровски.
|
|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
19-Апр-24 01:28
(спустя 20 мин., ред. 19-Апр-24 01:28)
KostyantynKo писал(а):
86156271Мне кажется, что РАД Студия в наши дни начинается с какого то выживания. Наверно сами разработчики утратили интерес или устали от своего детища. Неужели, у них нету Quality Check  тестеров?...
Отправил им письмо, что-бы патч поправили на правильное имя файла в батниках. Надеюсь, поправят 
Увы, это не только Embarcodero стиль. Это как я замечаю общая тенденция. Во первых самое простое как экономить на разработке - путь пользователи сами протестируют. Если это стартап проект - то так поступать конечно нельзя, а если пользователь уже уже посажен на продукт, то такой подход крайне привлекателен для "эффективного менеджера". Во вторых рынок давно заполнен горе программистами с двумесячными курсами написания Hello, World! Они даже не представляют себе во что выливается и как исполняется любая самая простая строка кода и как это все работает. А самое главное, что такие горе-программисты стоят дешево  Опять таки, сплошная выгода...
Но жить от этого не проще. Каждую новую версию надо "понять и простить". На что уходит немало времени и сил...
|
|
KostyantynKo
  Стаж: 15 лет 3 месяца Сообщений: 1629
|
KostyantynKo ·
19-Апр-24 02:05
(спустя 36 мин., ред. 19-Апр-24 02:05)
hattab_ali писал(а):
86157060KostyantynKo
Выпустить хотфикс для патча... это так по Эмбаркадеровски.
!!! Поправили !!! - но криво (Ну, на*рена в папке?) 
CRC32:"aca4f922"
MD5: "59e819fe6e8d2a2816dff62e506d242c"
SHA-1:"803eec3d6c55f44036837d7add447b60531643ae"
R121.patch1-20240417-2.zip 505 MB (530,560,725 bytes)
|
|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
19-Апр-24 13:34
(спустя 11 часов)
Кстати - удаленная отладка VCL Win32 Win64 с помощью PA Server в 10 версии работала. В 11 версии сломали хождение по шагам, в 12 так и не починили
|
|
KostyantynKo
  Стаж: 15 лет 3 месяца Сообщений: 1629
|
KostyantynKo ·
20-Апр-24 10:35
(спустя 21 час, ред. 25-Июл-24 10:44)
Один вопрос с другого форума...
Цитата:
Можно ли снова установить R12 на Windows 7?
Ответ: Да. Но некоторые функции могут быть ограничены.
|
|
temp128
 Стаж: 16 лет 5 месяцев Сообщений: 478
|
temp128 ·
20-Апр-24 16:04
(спустя 5 часов, ред. 20-Апр-24 16:08)
KostyantynKo писал(а):
86162297Один вопрос с другого форума...
Цитата:
Можно ли снова установить R12 на Windows 7?
Ответ: Да. Но некоторые функции могут быть ограничены. ...
Свисните им, там, на другом форуме, чтобы сюда приходили, тут, по моему  , это все знают ! А ограничения, мы с Вами, сняли  .
Заодно, и пусть crack, для coreide290.bpl берут - я его, еще раз, немного, улучшил ( только версию для patch1. Теперь coreide290.bpl, снова, перемещаемая - подавил записи в секции .reloc, и вернул флаг IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE ).
|
|
KostyantynKo
  Стаж: 15 лет 3 месяца Сообщений: 1629
|
KostyantynKo ·
20-Апр-24 21:53
(спустя 5 часов)
temp128 писал(а):
86163673Свисните им, там, на другом форуме
Сделано. Думаю что на Китайский себе переведут.
скрытый текст
Код:
http://bbs.2ccc.com/topic.asp?topicid=693227
|
|
Ce3apyc
Стаж: 9 лет Сообщений: 63
|
Ce3apyc ·
22-Апр-24 16:48
(спустя 1 день 18 часов)
Патч довольно приличный по размеру. Как думаете, стоит ждать 12.2 в ближайшем будущем?
|
|
temp128
 Стаж: 16 лет 5 месяцев Сообщений: 478
|
temp128 ·
23-Апр-24 15:10
(спустя 22 часа, ред. 30-Апр-24 21:52)
Ce3apyc писал(а):
86172914.... Как думаете, стоит ждать 12.2 в ближайшем будущем?
Ничего ждать не нужно. Пользуйтесь той, что есть сейчас !
Если перефразировать, известную поговорку, то: " В гробу разработчика, компьютера нет !" . Куда RAD Studio XXX ставить будете ? 
Компиляторы из состава RAD Studio потрясают !
Мне, тут, одна фирма, предлагала работу, и я участвовал, в техническом собеседовании.
Там мне задали вопрос: Как будет работать, такая программа ? ( в Linux нв x86_64 , компилятор g++ ) - Она упадет, из-за литерала "bbb", который будет помещен, в защищенную от записи, страницу памяти :
скрытый текст
Код:
#include <iostream> void f(char *a, char *b)
{
a[0] = 'A';
b[0] = 'B';
} int main(int argc, char *argv[])
{
char A[] = "aaa";
char *B = "bbb"; f(A, B); std::cout << A << std::endl
<< B << std::endl; return 0;
}
Я решил, эту проблему, исследовать, применительно к компиляторам из RAD Studio. Программу я переписал так ( В комментариях, написано, как это, будет работать ):
скрытый текст
Код:
#include <iostream> void f(char *a, char b)
{
*a = b;
} void g(const char *a)
{
f(const_cast<char *>(a), 'Z'); std::cout << a << std::endl;
} int main(int argc, char *argv[])
{
char A[] = "aaa";
char *P = "bbb";
const char *B = "bbb";
char *T = "bbb"; // Все литералы, на платформе Windows, помещаются в секцию .data,
// которая доступна для чтения и !!! записи.
//
// Новый компилятор, для платформы Winwows 64 bit (Modern), защищает
// литерал "bbb" от перезаписи. При попытке записать возникает, исключение
// !!! но оно перехватывается, если программа не работает из под отладчика,
// и программа продолжает выполняться !
//
f(A, 'A');
f(P, 'B'); std::cout << A << std::endl
<< P << std::endl; // Опция -dc "Put strings into the read-only data segment", для компилятора clang ( bcc32c.exe ),
// походу, фикция, как и для классики ( bcc32.exe ). Строка перезаписываемая !
g("Hello world"); // Компиляторы clang используют только один литерал "bbb" ( опция -d "Merge duplicate strings",
// походу, действует по умолчанию, т.е включить/выключить её нельзя !!! ),
// поэтому все три строки P, B и T одинаковые.
//
// Компилятор borland ( bcc32.exe ) инициализирует P, B, и T тремя разными
// литералами "bbb", ноаходящимися по разным адресам.
// Это лучше, по моему !
//
if ( P == B )
std::cout << "P and B is same" << std::endl;
else
std::cout << "P and B is different" << std::endl; if ( P == T )
std::cout << "P and T is same" << std::endl;
else
std::cout << "P and T is different" << std::endl; std::cout << P << std::endl
<< B << std::endl
<< T << std::endl; return 0;
}
Честно сказать, такгого на ..., я не ожидал  ! Полный бардак с String Options. Опции, заявлены в компиляторах командной строки ( bcc32.exe, bcc32c.exe ), среда разработки их не использует, с компилятором clang 32 bit ( bcc32c.exe ). Если самому их задать, то они не оказывают заявленного эффекта  . Опция -dc не работает ни в классике ни в clang.
Провел дополнительное исследование. Переписал тест так:
скрытый текст
Код:
#include <stdio.h>
#pragma hdrstop //------------------------------------------------------------------------------
void try_write(const char *msg, const volatile char *a)
{
__try {
*const_cast<char *>(a) = '0';
}
__except ( 1 )
{
} if ( a[0] == '0' )
printf("%s is read / write\n", msg);
else
printf("%s is read only\n", msg);
} static const char A[] = "aaa"; //------------------------------------------------------------------------------
int main(int argc, char *argv[])
{
static const char B[] = "bbb";
static char C[] = "ccc"; try_write("A", A);
try_write("B", B);
try_write("C", C);
try_write("Literal", "Hello world"); const char *Q1 = "qqq";
const char *Q2 = "qqq"; if ( Q1 == Q2 )
printf("Q1 and Q2 are the same\n");
else
printf("Q1 and Q2 are different\n"); return 0;
}
Итого:
- Microsoft Visual Stusio 2022
скрытый текст
A is read only
B is read only
C is read / write
Literal is read only
A1 and A2 are the same
Снимаю шляпу, перед компилятором Microsoft Visual C++ 2022.
- Borland C++ 5.02 ( 1997 г ). Использовались опции -d -dc:
скрытый текст
A is read only !
B is read / write !
C is read / write !
Literal is read only !
P is read only !
Q1 and Q2 are the same
Тоже, есть, чем гордиться. Но есть непонятный момент - массив B не констнтный:
скрытый текст
Код:
000152 LEDATA Segment: _TEXT Offset: 0000 Length: 0164
0000: 55 8B EC 83 C4 DC B8 00 00 00 00 53 56 57 E8 00 U..........SVW..
0010: 00 00 00 66 C7 45 EC 08 00 8B 55 0C C6 02 30 66 ...f.E....U...0f
0020: C7 45 EC 00 00 8B 4D 0C 0F BE 01 83 F8 30 75 13 .E....M......0u.
0030: 8B 55 08 52 68 E6 00 00 00 E8 00 00 00 00 83 C4 .U.Rh...........
0040: 08 EB 11 8B 4D 08 51 68 FC 00 00 00 E8 00 00 00 ....M.Qh........
0050: 00 83 C4 08 8B 45 DC 64 A3 00 00 00 00 5F 5E 5B .....E.d....._^[
0060: 8B E5 5D C3 53 BB E2 00 00 00 56 68 E2 00 00 00 ..].S.....Vh....
0070: 8D 43 31 8D 73 2D 50 E8 84 FF FF FF 83 C4 08 68 .C1.s-P........h
0080: 14 00 00 00 8D 53 33 52 E8 73 FF FF FF 83 C4 08 .....S3R.s......
0090: 68 18 00 00 00 8D 4B 35 51 E8 62 FF FF FF 83 C4 h.....K5Q.b.....
00A0: 08 8D 43 3F 50 8D 53 37 52 E8 52 FF FF FF 83 C4 ..C?P.S7R.R.....
00B0: 08 56 8D 4B 4B 51 E8 45 FF FF FF 83 C4 08 8D 43 .V.KKQ.E.......C
00C0: 4D 8D 53 4D 3B D0 75 0D 8D 4B 51 51 E8 00 00 00 M.SM;.u..KQQ....
00D0: 00 59 5E 5B C3 8D 43 69 50 E8 00 00 00 00 59 5E .Y^[..CiP.....Y^
00E0: 5B C3 61 61 61 00 25 73 20 69 73 20 72 65 61 64 [.aaa.%s is read
00F0: 20 2F 20 77 72 69 74 65 20 21 0A 00 25 73 20 69 / write !..%s i
0100: 73 20 72 65 61 64 20 6F 6E 6C 79 20 21 0A 00 70 s read only !..p
0110: 70 70 00 41 00 42 00 43 00 4C 69 74 65 72 61 6C pp.A.B.C.Literal
0120: 00 48 65 6C 6C 6F 20 77 6F 72 6C 64 00 50 00 71 .Hello world.P.q
0130: 71 71 00 51 31 20 61 6E 64 20 51 32 20 61 72 65 qq.Q1 and Q2 are
0140: 20 74 68 65 20 73 61 6D 65 0A 00 51 31 20 61 6E the same..Q1 an
0150: 64 20 51 32 20 61 72 65 20 64 69 66 66 65 72 65 d Q2 are differe
0160: 6E 74 0A 00 nt..
Тут Видно, что литералы попали в сегмент TEXT, и поэтому они read only, но массив B попал в сегмент DATA, а он read / write :
Код:
0002F1 LEDATA Segment: _DATA Offset: 0000 Length: 001C
0000: 00 00 00 00 DC FF FF FF 00 00 02 00 01 00 00 00 ................
0010: 25 00 00 00 62 62 62 00 63 63 63 00 %...bbb.ccc.
- Классический компилятор bcc32.exe ( наследник Borland C++ 5.02 ), Компилятор clang ( bcc32c.exe, bcc64.exe ) . Использовались опции -d -dc:
скрытый текст
A is read / write !
B is read / write !
C is read / write !
Literal is read / write !
P is read / write !
Q1 and Q2 are the same
Полный отстой ! Сохраняется только логическая константность. Физически, все литералы, и массивы, перезаписываемые. И ясно почему:
скрытый текст
Код:
000312 LEDATA Segment: (2) _DATA Offset: 0000 Length: 00A0
0000: 00 00 00 00 00 00 00 00 DC FF FF FF 00 00 02 00 ................
0010: 01 00 00 00 38 00 00 00 62 62 62 00 63 63 63 00 ....8...bbb.ccc.
0020: 61 61 61 00 25 73 20 69 73 20 72 65 61 64 20 2F aaa.%s is read /
0030: 20 77 72 69 74 65 20 21 0A 00 25 73 20 69 73 20 write !..%s is
0040: 72 65 61 64 20 6F 6E 6C 79 20 21 0A 00 70 70 70 read only !..ppp
0050: 00 41 00 42 00 43 00 4C 69 74 65 72 61 6C 00 48 .A.B.C.Literal.H
0060: 65 6C 6C 6F 20 77 6F 72 6C 64 00 50 00 41 31 20 ello world.P.Q1
0070: 61 6E 64 20 41 32 20 61 72 65 20 74 68 65 20 73 and Q2 are the s
0080: 61 6D 65 0A 00 41 31 20 61 6E 64 20 41 32 20 61 ame..Q1 and Q2 a
0090: 72 65 20 64 69 66 66 65 72 65 6E 74 0A 00 00 00 re different....
- Ноый компилятор Windows 64 bit (Modern) - bcc64x.exe :
скрытый текст
A is read only
B is read only
C is read / write
Literal is read only
P1 and P2 are the same
Тоже, снимаю шляпу, но на хрена было, перехватывать исключение ?! Только, гимор добавили, пришлось писать:
Код:
if ( a[0] == '0' ) ...
, т.к. исключение гасится.
|
|
elephantxp
Стаж: 18 лет 7 месяцев Сообщений: 62
|
elephantxp ·
28-Апр-24 21:24
(спустя 5 дней)
temp128 писал(а):
86176331
Ce3apyc писал(а):
86172914.... Как думаете, стоит ждать 12.2 в ближайшем будущем?
Ничего ждать не нужно. Пользуйтесь той, что есть сейчас !
Если перефразировать, известную поговорку, то: " В гробу разработчика, компьютера нет !" . Куда RAD Studio XXX ставить будете ? 
Компиляторы из состава RAD Studio потрясают !
Мне, тут, одна фирма, предлагала работу, и я участвовал, в техническом собеседовании.
Там мне задали вопрос: Как будет работать, такая программа ? ( в Linux нв x86_64 , компилятор g++ ) - Она упадет, из-за литерала "bbb", который будет помещен, в защищенную от записи, страницу памяти :
скрытый текст
Код:
#include <iostream> void f(char *a, char *b)
{
a[0] = 'A';
b[0] = 'B';
} int main(int argc, char *argv[])
{
char A[] = "aaa";
char *B = "bbb"; f(A, B); std::cout << A << std::endl
<< B << std::endl; return 0;
}
Я решил, эту проблему, исследовать, применительно к компиляторам из RAD Studio. Программу я переписал так ( В комментариях, написано, как это, будет работать ):
скрытый текст
Код:
#include <iostream> void f(char *a, char b)
{
*a = b;
} void g(const char *a)
{
f(const_cast<char *>(a), 'Z'); std::cout << a << std::endl;
} int main(int argc, char *argv[])
{
char A[] = "aaa";
char *P = "bbb";
const char *B = "bbb";
char *T = "bbb"; // Все литералы, на платформе Windows, помещаются в секцию .data,
// которая доступна для чтения и !!! записи.
//
// Новый компилятор, для платформы Winwows 64 bit (Modern), защищает
// литерал "bbb" от перезаписи. При попытке записать возникает, исключение
// !!! но оно перехватывается, если программа не работает из под отладчика,
// и программа продолжает выполняться !
//
f(A, 'A');
f(P, 'B'); std::cout << A << std::endl
<< P << std::endl; // Опция -dc "Put strings into the read-only data segment", для компилятора clang ( bcc32c.exe ),
// походу, фикция, как и для классики ( bcc32.exe ). Строка перезаписываемая !
g("Hello world"); // Компиляторы clang используют только один литерал "bbb" ( опция -d "Merge duplicate strings",
// походу, действует по умолчанию, т.е включить/выключить её нельзя !!! ),
// поэтому все три строки P, B и T одинаковые.
//
// Компилятор borland ( bcc32.exe ) инициализирует P, B, и T тремя разными
// литералами "bbb", ноаходящимися по разным адресам.
// Это лучше, по моему !
//
if ( P == B )
std::cout << "P and B is same" << std::endl;
else
std::cout << "P and B is different" << std::endl; if ( P == T )
std::cout << "P and T is same" << std::endl;
else
std::cout << "P and T is different" << std::endl; std::cout << P << std::endl
<< B << std::endl
<< T << std::endl; return 0;
}
Честно сказать, такгого на ..., я не ожидал  ! Полный бардак с String Options. Опции, заявлены в компиляторах командной строки ( bcc32.exe, bcc32c.exe ), среда разработки их не использует, с компилятором clang 32 bit ( bcc32c.exe ). Если самому их задать, то они не оказывают заявленного эффекта  . Опция -dc не работает ни в классике ни в clang.
Провел дополнительное исследование. Переписал тест так:
скрытый текст
Код:
#include <stdio.h>
#pragma hdrstop //------------------------------------------------------------------------------
void try_write(const char *msg, const volatile char *a)
{
__try {
*const_cast<char *>(a) = '0';
}
__except ( 1 )
{
} if ( a[0] == '0' )
printf("%s is read / write\n", msg);
else
printf("%s is read only\n", msg);
} static const char A[] = "aaa"; //------------------------------------------------------------------------------
int main(int argc, char *argv[])
{
static const char B[] = "bbb";
static char C[] = "ccc"; try_write("A", A);
try_write("B", B);
try_write("C", C);
try_write("Literal", "Hello world"); const char *Q1 = "qqq";
const char *Q2 = "qqq"; if ( Q1 == Q2 )
printf("Q1 and Q2 are the same\n");
else
printf("Q1 and Q2 are different\n"); return 0;
}
Итого:
- Microsoft Visual Stusio 2022
скрытый текст
A is read only
B is read only
C is read / write
Literal is read only
A1 and A2 are the same
Снимаю шляпу, перед компилятором Microsoft Visual C++ 2022.
- Borland C++ 5.02 ( 1996 г ). Использовались опции -d -dc:
скрытый текст
A is read only !
B is read / write !
C is read / write !
Literal is read only !
P is read only !
Q1 and Q2 are the same
Тоже, есть, чем гордиться. Но есть непонятный момент - массив B не констнтный:
скрытый текст
Код:
000152 LEDATA Segment: _TEXT Offset: 0000 Length: 0164
0000: 55 8B EC 83 C4 DC B8 00 00 00 00 53 56 57 E8 00 U..........SVW..
0010: 00 00 00 66 C7 45 EC 08 00 8B 55 0C C6 02 30 66 ...f.E....U...0f
0020: C7 45 EC 00 00 8B 4D 0C 0F BE 01 83 F8 30 75 13 .E....M......0u.
0030: 8B 55 08 52 68 E6 00 00 00 E8 00 00 00 00 83 C4 .U.Rh...........
0040: 08 EB 11 8B 4D 08 51 68 FC 00 00 00 E8 00 00 00 ....M.Qh........
0050: 00 83 C4 08 8B 45 DC 64 A3 00 00 00 00 5F 5E 5B .....E.d....._^[
0060: 8B E5 5D C3 53 BB E2 00 00 00 56 68 E2 00 00 00 ..].S.....Vh....
0070: 8D 43 31 8D 73 2D 50 E8 84 FF FF FF 83 C4 08 68 .C1.s-P........h
0080: 14 00 00 00 8D 53 33 52 E8 73 FF FF FF 83 C4 08 .....S3R.s......
0090: 68 18 00 00 00 8D 4B 35 51 E8 62 FF FF FF 83 C4 h.....K5Q.b.....
00A0: 08 8D 43 3F 50 8D 53 37 52 E8 52 FF FF FF 83 C4 ..C?P.S7R.R.....
00B0: 08 56 8D 4B 4B 51 E8 45 FF FF FF 83 C4 08 8D 43 .V.KKQ.E.......C
00C0: 4D 8D 53 4D 3B D0 75 0D 8D 4B 51 51 E8 00 00 00 M.SM;.u..KQQ....
00D0: 00 59 5E 5B C3 8D 43 69 50 E8 00 00 00 00 59 5E .Y^[..CiP.....Y^
00E0: 5B C3 61 61 61 00 25 73 20 69 73 20 72 65 61 64 [.aaa.%s is read
00F0: 20 2F 20 77 72 69 74 65 20 21 0A 00 25 73 20 69 / write !..%s i
0100: 73 20 72 65 61 64 20 6F 6E 6C 79 20 21 0A 00 70 s read only !..p
0110: 70 70 00 41 00 42 00 43 00 4C 69 74 65 72 61 6C pp.A.B.C.Literal
0120: 00 48 65 6C 6C 6F 20 77 6F 72 6C 64 00 50 00 71 .Hello world.P.q
0130: 71 71 00 51 31 20 61 6E 64 20 51 32 20 61 72 65 qq.Q1 and Q2 are
0140: 20 74 68 65 20 73 61 6D 65 0A 00 51 31 20 61 6E the same..Q1 an
0150: 64 20 51 32 20 61 72 65 20 64 69 66 66 65 72 65 d Q2 are differe
0160: 6E 74 0A 00 nt..
Тут Видно, что литералы попали в сегмент TEXT, и поэтому они read only, но массив B попал в сегмент DATA, а он read / write :
Код:
0002F1 LEDATA Segment: _DATA Offset: 0000 Length: 001C
0000: 00 00 00 00 DC FF FF FF 00 00 02 00 01 00 00 00 ................
0010: 25 00 00 00 62 62 62 00 63 63 63 00 %...bbb.ccc.
- Классический компилятор bcc32.exe ( наследник Borland C++ 5.02 ), Компилятор clang ( bcc32c.exe, bcc64.exe ) . Использовались опции -d -dc:
скрытый текст
A is read / write !
B is read / write !
C is read / write !
Literal is read / write !
P is read / write !
Q1 and Q2 are the same
Полный отстой ! Сохраняется только логическая константность. Физически, все литералы, и массивы, перезаписываемые. И ясно почему:
скрытый текст
Код:
000312 LEDATA Segment: (2) _DATA Offset: 0000 Length: 00A0
0000: 00 00 00 00 00 00 00 00 DC FF FF FF 00 00 02 00 ................
0010: 01 00 00 00 38 00 00 00 62 62 62 00 63 63 63 00 ....8...bbb.ccc.
0020: 61 61 61 00 25 73 20 69 73 20 72 65 61 64 20 2F aaa.%s is read /
0030: 20 77 72 69 74 65 20 21 0A 00 25 73 20 69 73 20 write !..%s is
0040: 72 65 61 64 20 6F 6E 6C 79 20 21 0A 00 70 70 70 read only !..ppp
0050: 00 41 00 42 00 43 00 4C 69 74 65 72 61 6C 00 48 .A.B.C.Literal.H
0060: 65 6C 6C 6F 20 77 6F 72 6C 64 00 50 00 41 31 20 ello world.P.Q1
0070: 61 6E 64 20 41 32 20 61 72 65 20 74 68 65 20 73 and Q2 are the s
0080: 61 6D 65 0A 00 41 31 20 61 6E 64 20 41 32 20 61 ame..Q1 and Q2 a
0090: 72 65 20 64 69 66 66 65 72 65 6E 74 0A 00 00 00 re different....
- Ноый компилятор Windows 64 bit (Modern) - bcc64x.exe :
скрытый текст
A is read only
B is read only
C is read / write
Literal is read only
P1 and P2 are the same
Тоже, снимаю шляпу, но на хрена было, перехватывать исключение ?! Только, гимор добавили, пришлось писать:
Код:
if ( a[0] == '0' ) ...
, т.к. исключение гасится.
Любопытно
|
|
temp128
 Стаж: 16 лет 5 месяцев Сообщений: 478
|
temp128 ·
04-Май-24 13:18
(спустя 5 дней, ред. 04-Май-24 14:03)
Приветствую Всех !
Скажите, а не замечали ли Вы, что IDE RAD Studio, пытается сохранять, даже те проекты, что не были изменены ?:
- Запускаем RAD Studio.
- Создаем новый проект ( например консольного приложения ).
- Сохраняем всё.
- Закрываем RAD Studio.
- Запускаем RAD Studio.
- Открываем проект ( он есть в списке recent )
- Тут-же, пытаемся закрыть RAD Studio - она предлагает сохранить проект, но ведь там, ничего не менялось !
Такое, иногда, происходило и раньше, в основе, если открывал очень старые проекты (созданные предыдущими RAD Studio), но сейчас, вижу это, с новым проектом  .
Причем, если разрешить сохранение, то новая, сохраненная версия файлов, не будет отличаться от предыдущей ! - проверил git'ом.
|
|
YaStudent
Стаж: 15 лет 1 месяц Сообщений: 15
|
YaStudent ·
04-Май-24 17:27
(спустя 4 часа)
temp128 писал(а):
86221173Приветствую Всех !
Скажите, а не замечали ли Вы, что IDE RAD Studio, пытается сохранять, даже те проекты, что не были изменены ?:
- Запускаем RAD Studio.
- Создаем новый проект ( например консольного приложения ).
- Сохраняем всё.
- Закрываем RAD Studio.
- Запускаем RAD Studio.
- Открываем проект ( он есть в списке recent )
- Тут-же, пытаемся закрыть RAD Studio - она предлагает сохранить проект, но ведь там, ничего не менялось !
Такое, иногда, происходило и раньше, в основе, если открывал очень старые проекты (созданные предыдущими RAD Studio), но сейчас, вижу это, с новым проектом  .
Причем, если разрешить сохранение, то новая, сохраненная версия файлов, не будет отличаться от предыдущей ! - проверил git'ом.
Замечал такое поведение ещё в 11 версии, но внимание этому не придавал, так как если ничего не менял, то просто отказываюсь от сохранения
|
|
temp128
 Стаж: 16 лет 5 месяцев Сообщений: 478
|
temp128 ·
06-Май-24 12:19
(спустя 1 день 18 часов, ред. 06-Май-24 12:21)
YaStudent писал(а):
86222187Замечал такое поведение ещё в 11 версии, но внимание этому не придавал, так как если ничего не менял, то просто отказываюсь от сохранения
Я, тоже, так делаю, но мне, доводится, достаточно долго, работать с продуктами Borland, Codegear, Embarcadero, и я помню, что еще, IDE прошлых продуктов, корректно отрабатывала, наличие изменений / отсутствие таковых, в проекте.
Такое, кривое поведение, просто, достает  !
|
|
newhumanoid
Стаж: 3 года 6 месяцев Сообщений: 19
|
newhumanoid ·
13-Май-24 19:58
(спустя 7 дней)
KostyantynKo писал(а):
86110174@kosmogen
А также проверьте на наличие установленных компонентов.
Подскажите, можно ли такую галочку (Моделинг) включить в 10.4 и в каком єто режиме сделать? Потому как там тоже нет форматера.
Или там как то по другому его можно включить?
|
|
|