Форум: "Потрепаться";
Текущий архив: 2003.07.10;
Скачать: [xml.tar.bz2];
ВнизПопинаем 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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c