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

Вниз

Д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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.81 MB
Время: 0.025 c
9-1175257757
akaValerius
2007-03-30 16:29
2008.11.30
Текстурирование при юз vertex arrays


15-1222415925
GanibalLector
2008-09-26 11:58
2008.11.30
Утерянный пароль для ОС Vista


2-1224101559
deras
2008-10-16 00:12
2008.11.30
Как вложить в тело письма html код?


3-1210662299
Beer_Hunter
2008-05-13 11:04
2008.11.30
Теоретический вопрос


4-1201174540
Light
2008-01-24 14:35
2008.11.30
Internet Explorer





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский