Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.12.29;
Скачать: CL | DM;

Вниз

Хреновина с опцией компилятора   Найти похожие ветки 

 
Германн ©   (2013-07-06 20:46) [0]

Есть вот такой код:
Главная (и единственная) форма
pas
unit 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;


dfm
object 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


dpr
program 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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.006 c
11-1247770454
Ruzzz
2009-07-16 22:54
2013.12.29
Не получается выставить font=Tahoma


2-1362198906
ixen
2013-03-02 08:35
2013.12.29
Вопрос про Ribbon от DevExpress


15-1373473424
картман
2013-07-10 20:23
2013.12.29
куда пойти учиться


15-1372893155
Ghost del vonte
2013-07-04 03:12
2013.12.29
NewPas


15-1369983700
clippership
2013-05-31 11:01
2013.12.29
Реинжиниринг торговой системы