IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Не компилируется старый проект в GNAT2011
сообщение
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Я тут когда-то выкладывал программу, которая графики рисует и всё такое.
Мне вдруг эта программа очень понадобилась, но старые ехе не сохранились нигде.
Программа собрана в GNAT2010.
Однако при сборке в GNAT2011 выдаётся предупреждение, что-то типа что вызывается инициализатор объекта, которого не существует и типа будет ошибка при запуске (повторить флаги, при которых выдаётся это предупреждение, не удалось). И вправду, exe при запуске сразу закрывается.

Плюс со средой что-то стало: при попытке запустить программу (даже новую) из среды выдаётся ошибка:
Код
[2012-10-22 14:09:29] Could not locate executable on path:

Переустановка не помогает.

В общем, что делать (с проектом (где в нём ошибка) и средой), программа вдруг стала позарез нужна?
На всякий случай добавляю исходники, в том виде, в котором у меня они есть.


Прикрепленные файлы
Прикрепленный файл  Func_Graph_Test.rar ( 26.11 килобайт ) Кол-во скачиваний: 370


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Где б взять еще 2011, чтобы проверить...

2012 прекрасно собирает проект, и запускает, кстати:
Прикрепленное изображение
только изменил первую строку GPR-файла на
with "win32ada.gpr";
, и изменил структуру папок:
Прикрепленное изображение
(так они должны быть судя по GPR-файлу, вот по этой записи: for Source_Dirs use (".", "..\UNITS\**"); папка где лежит GPR должна быть на одном уровне с папкой UNITS, а не UNITS должен быть вложен в нее).

Кроме этого, нашел на старом диске версию, скомпилированную еще GNAT 2009-ым (тот самый проект, который ты выкладывал как-то на форум), но запустить у меня ее, естественно, не получилось, поскольку DLL-ки уже обновились, и требуются другие версии. Но на всякий случай приложу результат компиляции 2009-ой версией тоже. Вот:
Прикрепленный файл  func_graph_test_09.zip ( 287.24 килобайт ) Кол-во скачиваний: 634

Прикрепленный файл  func_graph_test_12.zip ( 215.92 килобайт ) Кол-во скачиваний: 614


Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Во, за екзешник спасибо, очень нужен!
Правда ерунда с кодировкой в заголовке окна смущает, но это ладно.

Новая структура папок мне не нравится, ибо по замыслу UNITS она как бы одна на все проекты.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Ерунда с кодировкой - это из-за нерусифицированной Windows. В русскоязычной (или с применением AppLocale, позволяющей имитировать таковую) все нормально. Тот же EXE-шник, запущенный на XP через AppLocale:
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


А заголовки окон в английской версии быть русскими не могут?
Дело в том, что я пытался и сами окна создавать через CreateWindowW, но в заголовке была какая-то ерунда, хотя я текст в них отправлял так же, как и в кнопки, поля ввода итд, поэтому я для окон сделал исключение.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Могут. Но для этого надо приложить дополнительные усилия. Мало того, что нужно создавать окна через CreateWindowW, так еще и текст, который будет отправляться в заголовок, должен сохраняться не редактором GPS, а сторонним. Дело в том, что для корректной работы с заголовками окон (странно, но это так. С остальным кириллическим текстом это не так критично, хотя тоже желательно) нужно текст хранить в UTF8 with BOM, чего редактор GPS не делает, он хранит без BOM.

Поэтому обычно я делаю проще: все (даже не только кириллические) строковые константы выношу в отдельный модуль, который редактирую другим редактором. Можно редактировать и GPS-овским, но перед сборкой обязательно пересохранить сторонним в нужном формате.

with Interfaces.C;

package TxtConst is

use type Interfaces.C.wchar_array; -- Для &

Main_Class : constant Interfaces.C.wchar_array := "TestAppClass" & Interfaces.C.wide_nul;
Main_Caption : constant Interfaces.C.wchar_array := "Заголовок - кириллица" & Interfaces.C.wide_nul;

end TxtConst;
, а потом создается окно:

   function To_LPCWSTR is
new Ada.Unchecked_Conversion (System.Address, Win32.LPCWSTR);

-- ...

Main_Hwnd := CreateWindowW
(
To_LPCWSTR(Main_Class'Address),
To_LPCWSTR(Main_Caption'Address),
WS_OVERLAPPEDWINDOW or WS_CLIPCHILDREN,
CW_USEDEFAULT, CW_USEDEFAULT, 200, 150,
Null_Address, Null_Address, hInst, Null_Address
);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


А дописать BOM к строке принудительно прямо в GPS можно?
Типа

UTF8_BOM : constant char := ...
Main_Class : constant Interfaces.C.wchar_array := UTF8_BOM & "TestAppClass" & Interfaces.C.wide_nul;


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Нет, нельзя. BOM относится не к отдельной цепочке символов, а ко всему файлу. И стоять этот самый признак должен не в начале строки, а именно в начале исходника, который эту строку содержит.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 27.04.2024 3:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name