Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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.009 c
14-31470
Den
2003-06-24 11:56
2003.07.10
1 запрос к 2 БД?


14-31437
Mike B.
2003-06-23 13:41
2003.07.10
Поэзия


3-31136
ZDN
2003-06-18 09:23
2003.07.10
MSSQL, Oracle & DB2


1-31180
Фадеева
2003-06-27 20:09
2003.07.10
Работа с TForm через строку.


4-31579
Still Swamp
2003-05-08 18:46
2003.07.10
Thread





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