Главная страница
    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.46 MB
Время: 0.007 c
1-31255
Anonimus
2003-06-28 16:47
2003.07.10
SizeOf PChar


1-31190
Lex
2003-06-28 11:18
2003.07.10
Как отключить клавишу


7-31530
maxon
2003-04-22 13:50
2003.07.10
путь к системным папкам


4-31561
Forest
2003-05-10 15:26
2003.07.10
Как передать инфу в Edit внешнего приложения, зная его Name?


3-31122
Rel_
2003-06-17 12:06
2003.07.10
SQL запрос





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