Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.12.29;
Скачать: [xml.tar.bz2];

Вниз

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

 
Германн ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.003 c
15-1373211313
maxfox123
2013-07-07 19:35
2013.12.29
Кодирование плат


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


15-1373574372
Rouse_
2013-07-12 00:26
2013.12.29
А давайте померяемся :)


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


15-1373833803
Юрий
2013-07-15 00:30
2013.12.29
С днем рождения ! 15 июля 2013 понедельник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский