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

Вниз

Как влияет Range check на работу результирующего кода?   Найти похожие ветки 

 
@!!ex ©   (2011-05-05 16:22) [40]

Добавилось 4 строки:
0045985D 8B4DE8           mov ecx,[ebp-$18]
00459860 85C9             test ecx,ecx
00459862 7905             jns $00459869
00459864 E863A0FAFF       call @BoundErr

BoundErr не вызывается ни разу. То есть сам эксцепшн не возникает. Именно сопутствующий код как-то влияют.


 
@!!ex ©   (2011-05-05 16:23) [41]

Но он же не может никак влиять...
Сопутствующий код же не трогает сами данные...


 
@!!ex ©   (2011-05-05 18:32) [42]

Вынес вычисление указателя в отдельную строчку - все заработало как надо:
  It:=Pointer(cardinal(Data)+size-bytes);
  CopyMemory(It,@Buffer[0],bytes);


 
Sha ©   (2011-05-05 20:20) [43]

Ни разу не замечал, чтобы RangeCheck изменял
распределение регистров или переменных на стеке.
Но вдруг у тебя это не так.
Проверь свой исходный вариант на всякий случай.
Если окажется, что что-то меняется (стек или регистры),
то ov_read, возможно, это что-то портит.

И еще раз спрошу как ты узнал, что приведенный код
меняет свое поведение? А не ov_read?


 
Sha ©   (2011-05-05 20:47) [44]

> @!!ex
Если используешь Delphi 7, приведи здесь минимальный компилируемый без ошибок кусок кода.


 
Sha ©   (2011-05-05 20:58) [45]

> @!!ex
tell_func должна возвращать integer или int64?


 
@!!ex ©   (2011-05-05 21:47) [46]

> Если окажется, что что-то меняется (стек или регистры),
>
> то ov_read, возможно, это что-то портит.

Вроде бы не меняется.


> И еще раз спрошу как ты узнал, что приведенный код
> меняет свое поведение? А не ov_read?

Проверял Buffer который возвращает ov_read, вроде он одинаковый всегда.
Да и с чего бы ему менять свое поведение, он же в отдельной dll!


> [44] Sha ©   (05.05.11 20:47)
> Если используешь Delphi 7, приведи здесь минимальный компилируемый
> без ошибок кусок кода.

У меня Turbo Delphi 2006


> [45] Sha ©   (05.05.11 20:58)
> tell_func должна возвращать integer или int64?

long в C++ хедере. То есть дельфевый integer.

Вроде бы проблем аразрешилась вынесением расчета указателя в отдельную строку.
Видимо глюк компилятора? вероятно не имеет смысла дальше копать проблему. Просто время потратим.


 
Inovet ©   (2011-05-05 22:17) [47]

> [46] @!!ex ©   (05.05.11 21:47)
> Видимо глюк компилятора?

Ты же сказал, что ничего не менялось кроме

> [40] @!!ex ©   (05.05.11 16:22)
> Добавилось 4 строки:
> 0045985D 8B4DE8           mov ecx,[ebp-$18]
> 00459860 85C9             test ecx,ecx
> 00459862 7905             jns $00459869
> 00459864 E863A0FAFF       call @BoundErr

Глюка не видать.


 
Sha ©   (2011-05-05 22:23) [48]

> Вроде бы проблем аразрешилась вынесением расчета указателя в отдельную строку.

Не разрешилась, а скорее всего упрятана еще глубже.

> Видимо глюк компилятора?

Видишь глюк в сгенерированном коде - покажи,
не видишь - не надо напраслины.
Какой может быть глюк, если распределение переменных
по регистрам и стеку то же самое?
Их порча в ov_read куда вероятнее.

> вероятно не имеет смысла дальше копать проблему. Просто время потратим.

Ну, тогда кидай батоны. А код все же приведи, будет время - гляну.


 
han_malign   (2011-05-06 10:10) [49]


> Вынес вычисление указателя в отдельную строчку - все заработало как надо:
>   It:=Pointer(cardinal(Data)+size-bytes);
>   CopyMemory(It,@Buffer[0],bytes);

- вот и проверь какой какой asm код генерируется в исходном и этом случае(*$R-*), раз место локализовано...

З.Ы. В отличие от D7, BDS уже не ругается на "signed/unsigned mismatch", а молча расширяет до int64(напоролся тут недавно...), возможно $R+/- меняет это поведение.
С короткой формой записи у D2k6(Express) проблемы(например Obj.MethodReturnedObj.Method - вываливается на этапе компиляции), так что это действительно может быть фичей глюкогенератора...


 
@!!ex ©   (2011-05-08 15:50) [50]

> А код все же приведи, будет время - гляну.

Я привел весь код загрузки OGG.
Выложить еще дополнительно всю инициализацию OpenAL, инициализацию Sound Buffer"a под полученные из OGG данные и создание Sound Source для воспризведения?


 
Мимо хотел пройти   (2011-05-08 18:42) [51]


> @!!ex ©   (08.05.11 15:50) [50]


Да, выложи пожалуйста.


 
Sha ©   (2011-05-09 02:47) [52]

> @!!ex ©   (08.05.11 15:50) [50]
> Я привел весь код загрузки OGG.

Ты пробовал компилировать, то что привел?

> Выложить еще дополнительно ... ?

Да мне пофиг.


 
@!!ex ©   (2011-05-09 09:42) [53]

> Ты пробовал компилировать, то что привел?

Конечно. А в чем проблема?


 
Sha ©   (2011-05-09 11:05) [54]

> А в чем проблема?

Твоя проблема в том, что ты не слышишь других.

Создай новый проект из того, что выложил.
Попробуй откомпилировать.
Посмотри на собщения.
Исправь ошибки.


 
@!!ex ©   (2011-05-10 02:52) [55]

Этот код 1 в 1 повторяет код проекта на котором я проводил тесты, он тупо отткуда скопипастен.
Так что мне все еще не понятно в чем ваша проблема с компиляцией этого кода.


 
Sha ©   (2011-05-10 08:57) [56]

Наверно, в том, что я тоже ленив
и наперед знаю, что ни такой код


unit RangeCheckFormP;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs;

type
 TForm1 = class(TForm)
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

// тут твой код из [18]

end.


ни такой


program RangeCheckConsole;

{$APPTYPE CONSOLE}

uses
 SysUtils;

// тут твой код из [18]

begin
 { TODO -oUser -cConsole Main : Insert code here }
end.


даже не скомпилируется.



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

Форум: "Прочее";
Текущий архив: 2011.08.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.004 c
2-1305328162
TheEd
2011-05-14 03:09
2011.08.28
в разных DBF-файлах строки разного формата - как прочитать?


15-1303971325
Alien1769
2011-04-28 10:15
2011.08.28
Магический квадрат


3-1263280888
Tornado
2010-01-12 10:21
2011.08.28
Не могу записать библиотеку


15-1304220544
PiterPen
2011-05-01 07:29
2011.08.28
Delphi x64


4-1241950542
DelphiN!
2009-05-10 14:15
2011.08.28
Перехват WM_INPUT всех окон





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