Форум: "Прочее";
Текущий архив: 2013.12.29;
Скачать: [xml.tar.bz2];
ВнизХреновина с опцией компилятора Найти похожие ветки
← →
Германн © (2013-07-06 20:46) [0]Есть вот такой код:
Главная (и единственная) форма
pasunit Unit1;
{$H-}
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
Table1: TTable;
Table1Name: TStringField;
DataSource1: TDataSource;
DBGrid1: TDBGrid;
procedure FormShow(Sender: TObject);
procedure Table1NameGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormShow(Sender: TObject);
begin
Table1.Open;
end;
procedure TForm1.Table1NameGetText(Sender: TField; var Text: string;
DisplayText: Boolean);
begin
//
end;
dfmobject Form1: TForm1
Left = 0
Top = 0
Caption = "Form1"
ClientHeight = 311
ClientWidth = 643
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = "Tahoma"
Font.Style = []
OldCreateOrder = False
OnShow = FormShow
PixelsPerInch = 96
TextHeight = 13
object DBGrid1: TDBGrid
Left = 16
Top = 24
Width = 320
Height = 120
DataSource = DataSource1
TabOrder = 0
TitleFont.Charset = DEFAULT_CHARSET
TitleFont.Color = clWindowText
TitleFont.Height = -11
TitleFont.Name = "Tahoma"
TitleFont.Style = []
end
object Table1: TTable
DatabaseName = "DBDEMOS"
TableName = "country.db"
Left = 40
Top = 200
object Table1Name: TStringField
FieldName = "Name"
OnGetText = Table1NameGetText
Size = 24
end
end
object DataSource1: TDataSource
DataSet = Table1
Left = 80
Top = 200
end
end
dprprogram Project1;
uses
Forms,
Unit1 in "Unit1.pas" {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Не понимаю почему компилятор (Д2007) не может увидеть ошибку с разными типами string?
Если кто может попробовать собрать этот проект в более старших версиях Дельфи был бы рад узнать результат.
Исходники можно скачать тут: http://rusfolder.com/37139852
← →
Jeer © (2013-07-06 21:14) [1]Попробуй заменить TField -> TStringField
← →
картман © (2013-07-06 21:14) [2]
> с разными типами string?
а это где?(ХЕ3 тоже не видит)
← →
Германн © (2013-07-06 21:32) [3]
> картман © (06.07.13 21:14) [2]
>
>
> > с разными типами string?
>
> а это где?(ХЕ3 тоже не видит)
>
> procedure Table1NameGetText(Sender: TField; var Text:
> string;
Это обработчик события TField.OnGetText. Он вызывается из недр VCL, а там (в Д2007) string = AnsiString. А у меня в коде установлена опция {$H-}. Компилятор этого не учитывает и "как-то" собирает проект рождая в результате "не мышонка, не лягушку" а страшного зверя.
← →
картман © (2013-07-06 22:03) [4]
> Германн © (06.07.13 21:32) [3]
в ХЕ3 так:
TFieldGetTextEvent = procedure(Sender: TField; var Text: string;
DisplayText: Boolean) of object;
только не говори, что у тебя 2007 лицензионный))
← →
картман © (2013-07-06 22:08) [5]
> картман © (06.07.13 22:03) [4]
млин, подумал, что проблема в ANSI и UNICODE))
← →
Компромисс1 © (2013-07-09 20:07) [6]Может установить H- в опциях всего проекта? Чтобы из "недр VCL" приходил тоже ShortString?
← →
Rouse_ © (2013-07-09 20:41) [7]
> Компромисс1 © (09.07.13 20:07) [6]
> Может установить H- в опциях всего проекта? Чтобы из "недр
> VCL" приходил тоже ShortString?
"Недры VCL" поставляются в собранном варианте в виде DCU (т.е. директивы их уже не интересуют).
Повлиять на них можно только вытащив исходники модуля в папку с проектом.
Собственно что я и советую в данном случае.
> картман © (06.07.13 22:03) [4]
> только не говори, что у тебя 2007 лицензионный))
Ты говоришь об этом так, как будто лицензионное ПО сейчас все еще нонсенс :)
← →
картман © (2013-07-09 20:45) [8]
> Ты говоришь об этом так, как будто лицензионное ПО сейчас
> все еще нонсенс :)
не вообще, а конкретно D2007 - ничего нового, а стоил, поди, тыщи 3-4 долларов.
← →
Германн © (2013-07-09 20:48) [9]
> Rouse_ © (09.07.13 20:41) [7]
> Повлиять на них можно только вытащив исходники модуля в
> папку с проектом.
> Собственно что я и советую в данном случае.
Чем я тебя так обидел, Саш?
:)
← →
Rouse_ © (2013-07-09 20:50) [10]
> картман © (09.07.13 20:45) [8]
Так они все так стоят, но если обновляться - то много денег можно скостить.
А по поводу ничего нового - эт ты зря, 2007-ая была очень удачным продуктом.
← →
Rouse_ © (2013-07-09 20:52) [11]
> Германн © (09.07.13 20:48) [9]
> Чем я тебя так обидел, Саш? :)
Это как вариант, я собственно периодически пользуюсь таким подходом в некоторых случаях, где наблюдаються реальные ляпы с стандартных модулях.
← →
картман © (2013-07-09 20:54) [12]
> А по поводу ничего нового - эт ты зря, 2007-ая была очень
> удачным продуктом.
ну, может быть, я ж со-своей колокольни - по мне, так никакой разницы между D7 и XE3))
← →
Rouse_ © (2013-07-09 20:59) [13]
> картман © (09.07.13 20:54) [12]
> по мне, так никакой разницы между D7 и XE3))
Эк ты с запасом разрывчик взял :)
По сути это два совершенно разных подхода к реализации алгоритмики :)
Я специально держу под рукой семерку для проверки совместимости своих публичных кусков кода, а так-бы давно все переписал только под ХЕ4.
← →
картман © (2013-07-09 21:02) [14]
> По сути это два совершенно разных подхода к реализации алгоритмики
поясни, пожалуйста.
← →
Германн © (2013-07-09 21:07) [15]
> Rouse_ © (09.07.13 20:52) [11]
>
>
> > Германн © (09.07.13 20:48) [9]
> > Чем я тебя так обидел, Саш? :)
>
> Это как вариант, я собственно периодически пользуюсь таким
> подходом в некоторых случаях, где наблюдаються реальные
> ляпы с стандартных модулях.
>
Я не считаю мой случай ляпами стандартных модулей VCL, Саш. Просто то старое ноу-хау разработчиков Дельфи с опцией $H со временем оказалось очень неудачной ш(ут)/(ту)кой, в которую я и вляпался при попытке модернизировать некий старый проект. Его перевели в своё время с Д16 на Д32 поставив в опциях проекта {$H-} а я это не сразу заметил. И почти полторы суток не мог никак понять почему проект с моими небольшими добавками при запуске без отладчика просто падал без указания причин (Эврика при этом тоже молчала). А при запуске под отладчиком выдавал "бессмысленные" для меня сообщения типа "privileged instruction".
:)
← →
Rouse_ © (2013-07-09 21:11) [16]
> картман © (09.07.13 21:02) [14]
В язык добавлено очень много так называемого "синтаксического сахара", позволяющего писать более простой и понятный разработчику код.
Дженерики к примеру.
Очень удобно работать с конструкция вида Value := Stream.ReadString, где ReadString это дженерик применяемый ко всем видам наследников TStream.
Сортировка списков List<T> через анонимки осуществляется буквально тремя строчками кода (а раньше приходилось велосипедить)
Инлайны таки с 2010-ой версии заработали как положено (хотя оптимизация кода в их случае заставляет желать лучшего)
← →
Rouse_ © (2013-07-09 21:14) [17]
> А при запуске под отладчиком выдавал "бессмысленные" для
> меня сообщения типа "privileged instruction".
Это достаточно осмысленно сообщение - выполнение привилегированной инструкции вида IN/OUT причем отладчик должен встать на ее вызове, где у тебя будет стек вызовов.
← →
картман © (2013-07-09 21:17) [18]
> Rouse_ © (09.07.13 21:11) [16]
> В язык добавлено очень много так называемого "синтаксического
> сахара", позволяющего писать более простой и понятный разработчику
> код.
вот и я о чем. Но суть та же... собственно, Java, C#, Delphi - на мой взгляд одинаковые языки. Да, библиотеки там, технологии(тошнит от этого слова), нюансы всякие, но все равно все одно и то же.
← →
Rouse_ © (2013-07-09 21:44) [19]
> картман © (09.07.13 21:17) [18]
Суть-то конечно та-же самая, новый язык никто и не ставил целью изобрести, но вот в плане удобства использования...
Дома я пишу на семерке и ты знаешь - я бы не хотел переходить обратно полностью на нее, она достаточно "тесная", хотя раньше мне ее хватало за глаза.
← →
картман © (2013-07-09 21:50) [20]
> Rouse_ © (09.07.13 21:44) [19]
полностью согласен.
← →
Германн © (2013-07-09 21:52) [21]
> Это достаточно осмысленно сообщение - выполнение привилегированной
> инструкции вида IN/OUT
В данном случае отладчик останавливался на инструкции HLT. Перемотка ассемблера назад показала что эта инструкция липа. Её код на самом деле просто часть кода другой инструкции.
← →
Ega23 © (2013-07-09 21:52) [22]
> Очень удобно работать с конструкция вида Value := Stream.
> ReadString, где ReadString это дженерик применяемый ко всем
> видам наследников TStream.
Это же хелпер?
← →
Rouse_ © (2013-07-09 22:09) [23]
> Германн © (09.07.13 21:52) [21]
Это не липа, а инструкция.
Впрочем, выйди на меня завтра - могу по удаленке подключиться и точно показать место ошибки.
> Ega23 © (09.07.13 21:52) [22]
Угу, перпутал...
← →
Германн © (2013-07-09 22:27) [24]
> Rouse_ © (09.07.13 22:09) [23]
>
>
> > Германн © (09.07.13 21:52) [21]
>
> Это не липа, а инструкция.
> Впрочем, выйди на меня завтра - могу по удаленке подключиться
> и точно показать место ошибки.
Хочешь показать где именно портится стек?
← →
Rouse_ © (2013-07-09 22:48) [25]Угу
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.12.29;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.003 c