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

Вниз

Как влияет 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;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.01 c
1-1264209222
Gear
2010-01-23 04:13
2011.08.28
вызов MessageDlg из отдельной нитки


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


15-1304632321
R_R
2011-05-06 01:52
2011.08.28
Какой самый простой строковый алгоритм?


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


9-1189535717
LbS!
2007-09-11 22:35
2011.08.28
Подскажите тему :)