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

Вниз

Попинаем Delphi 7 ногами?   Найти похожие ветки 

 
sniknik ©   (2003-06-18 18:54) [0]

тут уже ложил пост про отличия 6 и 7 дельфи, естественно про нехорошие отличия, хорошие воспринимаются как само собой разумеющееся :о),
http://delphimaster.net/view/14-1054981623/
кто хочет может посмотреть.
ну да дело не в этом, просто наткнулся на уж явный глюк. так что считай продолжение темы.
глюк:
делаю в семерке Import Typy Library для Microsoft DAO 3.6 Object Library (dao360.dll) -> создать модуль. и получаю, большинство интерфейсов начинаются с

_DBEngine = interface(_DAO)
["{00000021-0000-0010-8000-00AA006D2EA4}"]
procedure GhostMethod__DBEngine_0_1; safecall;
procedure GhostMethod__DBEngine_4_2; safecall;
procedure GhostMethod__DBEngine_8_3; safecall;
...
function Get_Version: WideString; safecall;
.....

с херни какойто :-(.
вместо

_DBEngine = interface(_DAO)
["{00000021-0000-0010-8000-00AA006D2EA4}"]
function Get_Version: WideString; safecall;
function Get_IniPath: WideString; safecall;
.....

полез в поставляемый с дельфями DAO2000.pas а там то же самое. в общем то глюк не смертельный если поудалять эти призрачные методы, получается вполне рабочий модуль. но согласитесь неприятно.
для сравнения сделал экспорт в 6-ке, все сразу ok, и DAO2000.pas в нем правильный.

вот так вот. может кто проверит, может это только у меня? я конечно дома тоже повторю "эксперимент".


 
sniknik ©   (2003-06-18 23:57) [1]

нда... дома та же хрень. ;о( хотя, с чего бы быть разнице? ставилось с одного диска. а еще лицензия. может у пиратов исправленную версию купить? :о))


 
uw ©   (2003-06-19 00:11) [2]

dbExpress с оракловой хранимой процедурой работать не хочет (может, руки у кого прямее?)


 
sniknik ©   (2003-06-21 01:56) [3]

возвращаясь к теме. опять воткнулся в очередной глюк. :о(( ну я прям не "нарадуюсь" на свою дельфю.

смысл. функция WideFormat работает "коряво", в отличии от Format обрезает длинну представления значения float по заданному precision. т.е. число 12,345 при маске "%.2f" будет "12", если поставить "%.3f" то "12,".

в общем попробуйте пример, все станет ясно

procedure TForm1.Button1Click(Sender: TObject);
var
M : Currency;
ST : String;
begin
M:= 12.347;
//сдесь конечно будет преобразование но это же пример
ST:= Format("Format : %.2f"#13 , [M]) +
WideFormat("WideFormat : %.2f", [M]);

Application.MessageBox(PChar(ST), "");
end;


(использование WideFormat обусловлено тем что хочется избавится от лишних преобразований при работе с ADO, тестировал, скорость того же кода после замены возрастает ~ на 15%, естественно зависит от интенсивности работы со строками(WideString), но это не анализировал смотрел только свой код)

нашол как поправить -> модуль SysUtils
функция WideFormatBuf
...
@CvtWideStrLen:
//CMP ECX,Prec //мои исправления
//JA @E1 //
RET
@E1: MOV ECX,Prec //замена правильного значения
RET
...


ECX к этому моменту содержит обшую длинну float в строке (5 - length "12.35"), на выходе из функции из ECX берется количиство передаваемых символов.
Prec - precision (2 - "%. 2f")

от этого и глюк. зачем делается(делалась) эта замена? не понимаю. может есть тайный смысл? ускользающий от меня. :о(


 
sniknik ©   (2003-06-23 11:05) [4]

:о((, до меня дошло зачем это нужно, нужно при форматировании строки т.е. если параметр "%.2 s" и соответственно строчка на входе WideFormat("WideFormat : %.4s", ["Остатся должно 4 знака"]);
вот и весь тайный смысл. ;о)) с моими "исправлениями" строки не работают. (надо сделать другие)



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.023 c
1-31233
LuckyMan
2003-06-28 20:08
2003.07.10
Производительность TListView


14-31486
oleg_art
2003-06-24 17:54
2003.07.10
Отправка сообщения в порт


6-31390
ДмитрийК
2003-04-21 08:12
2003.07.10
Проблема с RasHangUp


1-31240
Andrey02
2003-06-28 19:39
2003.07.10
Thread поток - метод Synchronize. Качество программы.


14-31405
Nemra
2003-06-25 14:44
2003.07.10
Добавить пункт в меню OUTLOOK