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

Вниз

Д2009   Найти похожие ветки 

 
федот   (2008-08-30 18:35) [120]

var
C: TMyClass<Integer>;
begin
 TMyClass<Integer>.Create.Free;
end;


 
федот   (2008-08-30 18:40) [121]

Вообщем харе народ пугать, оба примера которые вы привели отлично раюотают )

TMyClass = class
   FMyRec: TAdvRec;
 public
   property MyRec: TAdvRec read FMyRec;
end;

var
 C: TMyClass;

procedure TForm7.FormCreate(Sender: TObject);
begin
 C := TMyClass.Create;
 if C.MyRec.Prop then
   beep;
end;

{ TAdvRec }

function TAdvRec.GetProp: boolean;
begin
 result := true;
end;

ЗЫ версия 12.0.3155.16733


 
jack128_   (2008-08-30 19:27) [122]


> C := TMyClass<Integer>.Create.Free;

Блин,  лоханулся.. Глаз замылился, сорри.


 
jack128_   (2008-08-30 19:29) [123]


>   FMyRec: TAdvRec;
>  public
>    property MyRec: TAdvRec read FMyRec;

доступ через метод, а не поле сделай.


 
федот   (2008-08-30 19:43) [124]

Internal Error


 
oxffff ©   (2008-08-30 19:50) [125]

Я тут слегка на них наехал за их реализацию Generics.

http://blogs.teamb.com/craigstuntz/2008/08/29/37832

Мои 6 и 8 комментарий.


 
jack128_   (2008-08-30 22:10) [126]


> Я тут слегка на них наехал за их реализацию Generics.

ну в асм я не лез, а чисто на практике - невозможность использовать опрераторы над дженериками - это аццтой..

ПРидирка:
нельзя написать так:

var
 Func: reference to function: Integer;

требуется описать тип
 TFunc = reference to function : Integer;
var
 Func: TFunc;

хотя например записи таким макаром нормально всегда описывались


 
Prohodil Mimo ©   (2008-08-30 23:20) [127]

Anatoly Podgoretsky ©   (29.08.08 19:21) [109]

потому и сказал, что первая.
а 8 именем Delphi назвать стыдно. Как такое вообще пропустили? Видать денег надо было срочно.

speller   (29.08.08 20:35) [112]
Редактор изначально русские буковки в cp1251 сохраняет, но если вставить какую абракадабру в исходник - предлагает сохранить в utf-8.

Anatoly Podgoretsky ©   (29.08.08 23:31) [113]
Таже чепуха и в 2006


Поставте в регионе для неуникода кирилицу, и просить не будет в utf-8 сконвертировать.


 
boa_kaa ©   (2008-08-30 23:23) [128]

ммм-дааа... была у заюшки избушка лубяная, а у лисы ледяная...


 
KilkennyCat ©   (2008-08-30 23:26) [129]


> boa_kaa ©   (30.08.08 23:23) [128]

а у подводного карлсона - термоядерный реактор!


 
boa_kaa ©   (2008-08-30 23:30) [130]


> KilkennyCat ©   (30.08.08 23:26) [129]

поди, лиса, вон! :D


 
KilkennyCat ©   (2008-08-30 23:33) [131]


> boa_kaa ©   (30.08.08 23:30) [130]
>
>
> > KilkennyCat ©   (30.08.08 23:26) [129]
>
> поди, лиса, вон! :D


уже: квартиру ищу...


 
Anatoly Podgoretsky ©   (2008-08-30 23:37) [132]

> Prohodil Mimo  (30.08.2008 23:20:07)  [127]

Кроме денег была и боязнь отстать от паровоза .NET
Так я знаю, что не будет, но я просто введу пару букв, хотя бы в комментарии, а не буду локализацию менять.
Так что эта особенно не новая, а существует с первых версий 200x и так не исправлено это, надо или все писать в UTF-8 или разрешить управлять этим в настройках.


 
Prohodil Mimo ©   (2008-08-30 23:44) [133]

Anatoly Podgoretsky ©   (30.08.08 23:37) [132]
не буду локализацию менять

отображение неуникода - не совсем локализация.

надо или все писать в UTF-8 или разрешить управлять этим в настройках

а зачем всё в UTF-8? появились нестандартные символы - в UTF-8, а если их нет, то и ASCII сойдёт. Хотя - дело вкуса, а мен лишние байты жалко :о)


 
Anatoly Podgoretsky ©   (2008-08-31 00:17) [134]

> Prohodil Mimo  (30.08.2008 23:44:13)  [133]

Если бы было так, то проблем бы не было, а проблема в том, если эти не попадающие под локализацию символы появлялись потом, то запрос уже не делался и преобразование тоже. Не знаю, может этот глюк решили в Д2007/9 но в 2006 ухо надо было держать тоже. Кстати в VS тоже самое, не уследишь при сохранение, то можно и потерять и не сразу это заметишь. А у меня подозрение, что студия лицензирована у Микрософт.


 
speller   (2008-08-31 05:31) [135]

Сохраняешь русские буквы в ascii, отдаешь исходник индусу, а у него локаль другая и прощайте нужные буковки. А если это не тексты, а какие служебные символы? Индус просто что-то исправил в коде, ничего более не трогал, и тебе вернулись квадратики или какая еще хрень вместо текста.


 
ggg   (2008-08-31 09:37) [136]

А что теперь будут возвращать функции Ord и Chr?
Как стоит переписать функции шифрования, которые используют посимвольные операции над байтами?
Т.е. если сейчас написать шифрование xor на БДС 2007, в 2009 функция скомпилируется, но результат будет различен и дешифровать без конвертации в AnsiString не удастся?


 
speller   (2008-08-31 10:11) [137]


> А что теперь будут возвращать функции Ord и Chr?

Вот такой код

var
 S: string;
begin
 S := IntToStr(Ord("я"));
 S := S + " ";
 S := S + IntToStr(Ord("&#64324;"));


компилируется в

// S := IntToStr(Ord("я"));
lea edx,[ebp-$04]
mov eax,$000000ff
call IntToStr
// S := S + " ";
lea eax,[ebp-$04]
mov edx,$0046421c
call @UStrCat
// S := S + IntToStr(Ord("&#64324;"));
lea edx,[ebp-$08]
mov eax,$0000fb44
call IntToStr
mov edx,[ebp-$08]
lea eax,[ebp-$04]
call @UStrCat


Русская буква осталась в ascii, а пробел пошел уже в юникоде... По-моему это глюк.


 
speller   (2008-08-31 10:24) [138]

нет, пробел не в юникоде, загнал я


 
Anatoly Podgoretsky ©   (2008-08-31 10:34) [139]

> ggg  (31.08.2008 9:37:16)  [136]

Все нормально, не волнуйся.


 
speller   (2008-08-31 11:17) [140]

На самом деле странно что вроде всё в юникоде, а ord на русской букве возвращает ascii значение. Или я просто чем-то не проникся?


 
speller   (2008-08-31 11:18) [141]

что выдаст ord("я") на компе индуса?


 
@!!ex ©   (2008-08-31 11:23) [142]

> [141] speller   (31.08.08 11:18)

Я так понимаю - зависит о того, в какой кодировке передана буква "я".
Не вижу проблемы.


 
Anatoly Podgoretsky ©   (2008-08-31 11:26) [143]

Код русской буквы "я", в соответствии с кодировкой.

> ord("я")

Откуда код? По всей видимости это в ANSI


 
speller   (2008-08-31 11:30) [144]


> зависит о того, в какой кодировке передана буква

Вне зависимости, в какой кодировке исходник, ascii или utf-8, результат ord("я") = 255. Т.е. компилятор во время компиляции делает преобразование из юникода в ascii. Что он сделает если буквы "я" нет в локали индуса? Подставит значение юникода и в результате получится ord("я") = 1103?


 
Loginov Dmitry ©   (2008-08-31 12:27) [145]

а что там сейчас с длинными комментами на русском?


 
speller   (2008-08-31 14:14) [146]

а что было?


 
ggg   (2008-08-31 14:28) [147]

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

Всё-таки как-то не убедительно с Ord :) Похоже, в случае с Ord("я") просто компилятор подставляет константу. Может для чистоты эксперимента попробуете строку взять из элемента формы?


 
DVM ©   (2008-08-31 21:56) [148]

В связи с тестированием Delphi2009 столкнулся с проблемкой, которой никак не могу найти удовлетворительного на мой взгляд решения.
Ранее пользовался функций:

function InetAddr(const AHost: string): integer;
var
 PHost:PChar;
 HostEnt: PHostEnt;
begin
 if AHost = "" then
   result := INADDR_NONE
 else
   begin
     PHost := PChar(AHost);
     Result := inet_addr(PHost);
     if Result = INADDR_NONE then
       begin
         HostEnt := GetHostByName(PHost);
         if HostEnt <> nil then
           Result := integer(pointer(HostEnt^.h_addr^)^);
       end;
   end;
end;


Функция прекрасно работала, пока string не превратился в WideString, а PChar в PWideChar. Хорошо, подумал я и поменял:

function InetAddr(const AHost: AnsiString): integer;
var
 PHost: PAnsiChar;
 HostEnt: PHostEnt;
begin
 if AHost = "" then
   result := INADDR_NONE
 else
   begin
     PHost := PAnsiChar(AHost);
     Result := inet_addr(PHost);
     if Result = INADDR_NONE then
       begin
         HostEnt := GetHostByName(PHost);
         if HostEnt <> nil then
           Result := integer(pointer(HostEnt^.h_addr^)^);
       end;
   end;
end;


Вроде бы все верно и действительно функция прекрасно работает в D7, но не работает в D2009, будучи вызвана, например, так:

procedure TForm1.FormCreate(Sender: TObject);
begin
 WSAStartup($101, WSA);
 caption := inttostr(InetAddr("ya.ru"));
end;


В функцию, как мне кажется передается строка, но строка по-видимому становится WideString, хотя у меня в параметрах функции указано AnsiString и никаких сообщений компилятор не выдает. Странно как то.
Как бы мне заставить это работать в обеих версиях делфи?


 
DVM ©   (2008-08-31 22:17) [149]

Наше проблему, дело оказалось не в WideString

Переделал так:

function InetAddr(const AHost: AnsiString): DWORD;
var
 PHost: PAnsiChar;
 HostEnt: PHostEnt;
begin
 if AHost = "" then
   result := INADDR_NONE
 else
   begin
     PHost := PAnsiChar(AHost);
     Result := inet_addr(PHost);
     if Result = INADDR_NONE then
       begin
         HostEnt := GetHostByName(PHost);
         if HostEnt <> nil then
           Result := DWORD(pointer(HostEnt^.h_addr^)^);
       end;
   end;
end;


в файле Winsock поменялось  INADDR_NONE      = -1; на INADDR_NONE      = DWORD($FFFFFFFF);


 
федот   (2008-08-31 22:21) [150]

это правильно, смотрите варнинги, которые есть.


 
DVM ©   (2008-08-31 22:24) [151]


> федот   (31.08.08 22:21) [150]

варнинг только в D2009 появлялся, в D7 его не было, я поэтому как то среди прочих сообщений не обратил внимания сразу на него.


 
DVM ©   (2008-08-31 22:27) [152]

чтобы без варнингов работало в обеих версиях, пришлось исправить:

function InetAddr(const AHost: AnsiString): DWORD;
var
 PHost: PAnsiChar;
 HostEnt: PHostEnt;
begin
 if AHost = "" then
   result := DWORD($FFFFFFFF)
 else
   begin
     PHost := PAnsiChar(AHost);
     Result := inet_addr(PHost);
     if Result = DWORD($FFFFFFFF) then
       begin
         HostEnt := GetHostByName(PHost);
         if HostEnt <> nil then
           Result := DWORD(pointer(HostEnt^.h_addr^)^);
       end;
   end;
end;


 
федот   (2008-09-01 20:15) [153]

Новый билд 12.0.3163.16897, чую  релиз.


 
oxffff ©   (2008-09-01 21:17) [154]

Намек понят.


 
DVM ©   (2008-09-01 21:19) [155]

Не не буду качать опять 600 мег. Теперь только релиз.


 
oxffff ©   (2008-09-01 21:35) [156]

Найден первый баг

TGenericRecord <T>: record = record
procedure DoSomething(aParam: T);
end;

procedure TForm1.FormCreate(Sender: TObject);
var a:TGenericRecord<integer>;
   b:integer;
begin
a.DoSomething(5);
end;

procedure TGenericRecord<T>.DoSomething(aParam: T);
var a:integer;
begin
a:=integer((@aParam)^);          //  Он здесь, привет EDX регистру
showmessage(inttostr(a));
end;

:(


 
oxffff ©   (2008-09-01 21:38) [157]


> федот   (01.09.08 20:15) [153]
> Новый билд 12.0.3163.16897, чую  релиз.


Неа, я теперь стал ожидать множество сервис паков.
Просто огромное количество.
Честно говоря нельзя быть настолько небрежным в отношении реализации языка.


 
oxffff ©   (2008-09-01 21:43) [158]

Приколько.
Я тут несколько высказался "демократично" насчет их реализации, я их не оскорблял, просто указал на некоторые изъяны.

Теперь. Очередной комментарий

Sergey Antonov Says: Your comment is awaiting moderation.

Повторяю в моих постах не было оскорблений, просто голые факты.
Интересно это связано как то с их оценкой роли России в мироустройстве.


 
jack128_   (2008-09-01 22:59) [159]


> Найден первый баг

в версии 12,0,3128,15596 все нормально..


 
oxffff ©   (2008-09-01 23:13) [160]


> jack128_   (01.09.08 22:59) [159]


У меня версия 12.0.3155.16733.
То есть получается они не делают, а ломают.

Нормально это исключение?

P.S. Включи оптимизацию и перестрой.



Страницы: 1 2 3 4 5 6 вся ветка

Текущий архив: 2008.11.30;
Скачать: CL | DM;

Наверх




Память: 0.83 MB
Время: 0.028 c
9-1175256771
3DProger
2007-03-30 16:12
2008.11.30
Создание местности


2-1224238980
Серёга
2008-10-17 14:23
2008.11.30
не удается вызвать форму из dll(KOL MCK)


2-1224230761
sbot
2008-10-17 12:06
2008.11.30
Видео из ресурса


2-1224785102
Wind
2008-10-23 22:05
2008.11.30
Получение адреса переменной


3-1210663653
Tornado
2008-05-13 11:27
2008.11.30
Grid от EhLib