Вверх ↑
Этот топик читают: Гость
Ответов: 273
Рейтинг: 29
#16: 2011-04-07 15:48:45 ЛС | профиль | цитата
nesco писал(а):
Объясни мне, что такое строка, как ты себе ее представляешь

Я ее себе представляю как область данных определенной длины в оперативной памяти.

Tad писал(а):
И в памяти это единички и нолики

Знаю. Меня беспокоит только их длина. Память не резиновая.
Обычная цепочка поток-конвертер-crc работает отменно, но жрет память четко.

Tad писал(а):
Это результат прелестей кубикостроения.

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


Тест на 4гиговых образах показал:
цепочка - зашкаливает память, вывалилось с ошибкой.
цепочка с мапингом... то же самое
Ппц. А totalcmd работает нормально.
Тестил этим:
Add(MainForm,2953706,63,91)
{
Width=169
Height=77
}
Add(MultiElementEx,1265720,294,140)
{
@Hint=#50:Вычисляет CRC32 для файла по стандартному полиному|
link(onCRC32,5126843:doValue,[(336,146)(336,183)(191,183)(191,153)])
link(FileName,6698304:Value,[(300,132)(209,132)])
}
BEGIN_SDK
Add(EditMultiEx,15924144,21,21)
{
WorkCount=#23:doCRC32=Вычисляет CRC32|
EventCount=#32:onCRC32=Выдает результат в поток|
VarCount=#24:CRC32=Содержит результат|
DataCount=#54:FileName=Имя файла, для которого нужно вычислить CRC32|
Width=251
Height=214
link(doCRC32,9801317:doEvent1,[(31,27)(31,55)])
link(CRC32,5481093:Var1,[(27,179)])
}
Add(CRC16_32,14272136,168,140)
{
Type=1
Metod=4
Polynom="$EDB88320"
Init="$FFFFFFFF"
link(onResult,3622167:doValue,[])
}
Add(StreamConvertor,5062690,126,140)
{
link(onResult,14272136:doCalcCRC,[])
link(Data,2681121:Stream,[])
}
Add(Hub,9801317,42,49)
{
OutCount=4
link(onEvent1,10646425:doWork2,[])
link(onEvent2,10615924:doValue,[(118,62)(118,97)])
link(onEvent3,4306968:doWork2,[])
link(onEvent4,12286570:doEvent1,[])
}
Add(Memory,3622167,210,140)
{
}
Add(SharedStream,2681121,126,49)
{
CoreName="ass"
Point(CountFileBlock)
Point(PageMem)
link(onOpen,10615924:doClear,[(171,55)(171,104)])
link(FileName,15924144:FileName,[(132,35)(27,35)])
link(PageMem,10615924:Value,[(160,40)(220,40)(220,130)(188,130)])
}
Add(DoData,4750086,210,189)
{
link(onEventData,15924144:onCRC32,[(251,195)(251,27)])
link(Data,5481093:Var2,[])
}
Add(GetDataEx,5481093,210,174)
{
link(Data,3622167:Value,[])
}
Add(Memory,10615924,182,91)
{
Default=Integer(1)
Point(Data)
link(Data,2681121:CountFileBlock,[(188,86)(153,86)])
}
Add(Hub,12286570,70,70)
{
OutCount=4
link(onEvent1,10646425:doWork3,[(95,76)])
link(onEvent2,5062690:doConvert,[(113,83)(113,146)])
link(onEvent3,4306968:doWork3,[(102,90)])
link(onEvent4,4750086:doData,[(102,97)(102,195)])
}
Add(HubEx,10646425,91,49)
{
link(onEvent,2681121:doOpen,[])
}
Add(HubEx,4306968,98,63)
{
link(onEvent,2681121:doClose,[])
}
END_SDK
Add(MultiElementEx,9095369,294,301)
{
@Hint=#50:Вычисляет CRC32 для файла по стандартному полиному|
link(onCRC32,143263:doValue,[(331,307)(331,348)(194,348)(194,314)])
link(FileName,8638730:Value,[(300,293)(209,293)])
}
BEGIN_SDK
Add(EditMultiEx,3077441,21,21)
{
WorkCount=#23:doCRC32=Вычисляет CRC32|
EventCount=#32:onCRC32=Выдает результат в поток|
VarCount=#24:CRC32=Содержит результат|
DataCount=#54:FileName=Имя файла, для которого нужно вычислить CRC32|
Width=230
Height=123
link(doCRC32,9773010:doEvent1,[(31,27)(31,55)])
link(CRC32,5379092:Value,[(27,137)(202,137)])
}
Add(CRC16_32,3975153,154,98)
{
Type=1
Metod=4
Polynom="$EDB88320"
Init="$FFFFFFFF"
link(onResult,5379092:doValue,[])
}
Add(FileStream,10662988,70,49)
{
link(onLoad,9266326:doConvert,[(107,55)(107,104)])
link(FileName,3077441:FileName,[(76,35)(27,35)])
}
Add(StreamConvertor,9266326,112,98)
{
link(onResult,3975153:doCalcCRC,[])
link(Data,10662988:Stream,[(118,90)(76,90)])
}
Add(Hub,9773010,42,49)
{
link(onEvent1,10662988:doOpen,[])
link(onEvent2,10662988:doClose,[])
}
Add(Memory,5379092,196,98)
{
link(onData,3077441:onCRC32,[(240,104)(240,27)])
}
END_SDK
Add(TimeCounter,16621982,252,140)
{
link(onStart,1265720:doCRC32,[])
link(onStop,8882687:doMessage,[(289,153)(289,209)])
}
Add(Message,8882687,294,203)
{
link(Message,5126843:Value,[(300,191)(209,191)])
}
Add(TimeCounter,5919751,252,301)
{
link(onStart,9095369:doCRC32,[])
link(onStop,5314278:doMessage,[(289,314)(289,370)])
}
Add(Message,5314278,294,364)
{
link(Message,143263:Value,[(300,352)(209,352)])
}
Add(Button,10209476,119,252)
{
Width=160
Caption="crc"
link(onClick,13500866:doExecute,[])
}
Add(Button,14533549,119,91)
{
Top=20
Width=160
Caption="map"
link(onClick,9863709:doExecute,[])
}
Add(ODialog,9863709,161,91)
{
link(onExecute,6698304:doValue,[])
}
Add(ODialog,13500866,161,252)
{
link(onExecute,8638730:doValue,[])
}
Add(Memory,6698304,203,91)
{
link(onData,16621982:doStart,[(243,97)(243,146)])
}
Add(Memory,8638730,203,252)
{
link(onData,5919751:doStart,[(243,258)(243,307)])
}
Add(Memory,143263,203,308)
{
link(onData,5919751:doStop,[])
}
Add(Memory,5126843,203,147)
{
link(onData,16621982:doStop,[])
}



Работают так (Графики):
цепочка - грузит файл в оперативку (пик дисковой активности под 100%) и начинает просчет (диск 0%). Проц под 100%, память - чуть больше файла.
Мапинг - диск без пиков и в приделах 1-2%, память чуть больше файла, проц под 100%. Т.е. все то же, но активность диска почти нулевая.
Тотал - диск под 100%, проц 8-9%, память до 20мб (0.5%!).

Значит тотал считает не весь файл, а маленькими кусками. Причем быстро и эффективно - высокая нагрузка на диск и маленькая на проц.


Так, как двигать проекцию по файлу думаю разберусь. Но вот для каждого сдвига придется свой crc вычислять, не так ли?
И че потом с ними делать? Как их обьединить в один? Надо думать и разбирать алгоритм и свойства crc по кусочкам.
карма: 0

0
Разработчик
Ответов: 26306
Рейтинг: 2146
#17: 2011-04-07 16:32:11 ЛС | профиль | цитата
tomas писал(а):
Я ее себе представляю как область данных определенной длины в оперативной памяти

А какого тогда упоминается именно текстовая строка, вот не надо увиливать, не я это писал
tomas писал(а):
Всем. Строка - текстовая, файл бинарный

tomas писал(а):
Значит тотал считает не весь файл, а маленькими кусками

А это что, новость Только у нас ограничение на файл стоит в 2 Гбйта, вот и все. И мапинг может кусками рабоать, вот только размер у него не ограничен, в отличии от обычных файловых компонентов

------------ Дoбавленo в 16.32:
tomas писал(а):
Тестил этим:

А где установка смещения файла FileOffset
Рекомендую внимательнее посмотреть примеры в Wiki (или F1 на компоненте), там как раз есть два примера по чтению и копированию больших файлов
карма: 22

0
Ответов: 273
Рейтинг: 29
#18: 2011-04-07 17:12:41 ЛС | профиль | цитата
nesco писал(а):
И что там думать, посчитал CRC одного блока, подал на Init и перешел на подсчет следующего блока

Так просто? Ща попробую...

Ага. Вроде работает. Память ест сколько скажу, проц 90%, диск почти не трогает.
Но выдает неправильные crc, если больше одного просчета. Т.е. фишка с Init не работает.
Схема получается такая:
Add(MainForm,2953706,378,105)
{
Width=169
Height=66
BorderStyle=1
}
Add(MultiElementEx,1265720,294,140)
{
@Hint=#62:Вычисляет CRC32 для файла по стандартному полиному с маппингом|
link(onCRC32,5126843:doValue,[(336,146)(336,183)(191,183)(191,153)])
link(FileName,6698304:Value,[(300,132)(209,132)])
link(onProgress,13530084:doEvent1,[])
}
BEGIN_SDK
Add(EditMultiEx,15924144,21,21)
{
WorkCount=#23:doCRC32=Вычисляет CRC32|
EventCount=#32:onCRC32=Выдает результат в поток|29:onProgress=Выдает % обработки|
VarCount=#24:CRC32=Содержит результат|
DataCount=#54:FileName=Имя файла, для которого нужно вычислить CRC32|
Width=489
Height=228
link(doCRC32,2606912:doEvent1,[(31,27)(31,90)])
link(CRC32,4303581:Var1,[(27,201)])
}
Add(Hub,2606912,42,84)
{
OutCount=3
link(onEvent1,2285719:doEvent1,[(69,90)(69,55)])
link(onEvent2,12437222:doOpen,[])
link(onEvent3,15201884:doFor,[(68,104)(68,160)])
}
Add(SharedStream,12437222,210,91)
{
CoreName="CRC32"
PageMem=64
Point(CountFileBlock)
Point(FileOffset)
Point(FileSize)
link(onOpen,14948633:doEvent1,[])
link(onRemapping,14948633:doEvent2,[])
link(FileName,15924144:FileName,[(216,32)(27,32)])
link(Offset,12053861:Value,[])
}
Add(Memory,12053861,224,49)
{
Default=Integer(0)
}
Add(Hub,7955653,182,70)
{
link(onEvent1,12053861:doValue,[(203,76)(203,55)])
link(onEvent2,12437222:doRemapping,[(203,83)(203,104)])
}
Add(For,15201884,77,154)
{
IncludeEnd=1
link(onEvent,9198003:doOperation,[])
link(onStop,16067870:doEvent1,[(114,167)(114,111)])
link(End,12814098:GetData,[])
}
Add(EventFromData,12814098,84,63)
{
link(onEvent,573981:doOperation,[])
}
Add(Math,573981,126,63)
{
OpType=1
Op2=1
link(onResult,12814098:doData,[(162,69)(162,58)(76,58)(76,69)])
link(Op1,12437222:CountFileBlock,[(132,41)(262,41)(262,136)(237,136)])
}
Add(CRC16_32,10763061,343,161)
{
Type=1
Metod=4
Polynom="$EDB88320"
Init="$FFFFFFFF"
Point(Init)
link(onResult,3776194:doValue,[(383,167)(383,41)])
link(Init,5628337:Var1,[(356,152)])
}
Add(StreamConvertor,14323846,301,161)
{
link(onResult,10763061:doCalcCRC,[])
link(Data,12437222:Stream,[(307,148)(216,148)])
}
Add(Hub,16067870,182,105)
{
link(onEvent1,12437222:doClose,[])
link(onEvent2,11898230:doData,[(203,118)(203,216)])
}
Add(Memory,3776194,392,35)
{
Default=String(FFFFFFFF)
}
Add(Hub,2285719,175,49)
{
link(onEvent1,3776194:doClear,[(199,55)(199,48)])
link(onEvent2,12053861:doClear,[])
}
Add(DoData,11898230,392,210)
{
link(onEventData,15924144:onCRC32,[(495,216)(495,27)])
link(Data,4303581:Var2,[])
}
Add(Math,5760399,413,161)
{
OpType=3
link(onResult,2592977:doOperation,[])
link(Op1,9198003:Result,[(419,136)(268,136)(268,194)(125,194)])
link(Op2,12437222:FileSize,[(426,131)(251,131)])
}
Add(Math,2592977,455,161)
{
OpType=2
Op2=100
ResultType=0
link(onResult,15924144:onProgress,[(502,167)(502,34)])
}
Add(GetDataEx,4303581,392,196)
{
link(Data,5628337:Var2,[])
}
Add(GetDataEx,12545579,238,137)
{
link(Data,12437222:FileOffset,[])
}
Add(Hub,14948633,273,91)
{
InCount=2
link(onEvent1,5760399:doOperation,[(405,97)(405,167)])
link(onEvent2,7569199:doEvent,[(294,104)])
}
Add(GetDataEx,5628337,392,147)
{
link(Data,3776194:Value,[])
}
Add(Math,9198003,119,154)
{
ResultType=0
link(onResult,7955653:doEvent1,[(167,160)(167,76)])
link(Op1,12437222:SizeMMF,[(125,138)(230,138)])
link(Op2,12545579:Var1,[(132,142)])
}
Add(Debug,7569199,287,140)
{
link(onEvent,14323846:doConvert,[(294,167)])
}
END_SDK
Add(TimeCounter,16621982,252,140)
{
link(onStart,1265720:doCRC32,[])
link(onStop,8882687:doMessage,[(289,153)(289,209)])
}
Add(Message,8882687,294,203)
{
link(Message,5126843:Value,[(300,191)(209,191)])
}
Add(Button,14533549,56,91)
{
Width=160
Caption="map"
link(onClick,9905081:doStart,[])
}
Add(ODialog,9863709,161,91)
{
link(onExecute,6698304:doValue,[])
}
Add(Memory,6698304,203,91)
{
link(onData,16621982:doStart,[(243,97)(243,146)])
}
Add(Memory,5126843,203,147)
{
link(onData,16621982:doStop,[])
}
Add(GProgressBar,3563637,378,147)
{
Top=20
Width=160
Height=10
LightProgress=65280
DarkProgress=0
}
Add(Hub,13530084,350,147)
{
link(onEvent1,3563637:doPosition,[])
link(onEvent2,2953706:doCaption,[(371,160)(371,111)])
}
Add(Thread,9905081,112,91)
{
FastStop=0
link(onExec,9863709:doExecute,[])
}



64 страницы = 4мб. Если файл меньше 4мб - crc верная. Если больше - нет.
Все-таки надо думать Так что копаю дальше...
карма: 0

0
Разработчик
Ответов: 26306
Рейтинг: 2146
#19: 2011-04-07 17:28:56 ЛС | профиль | цитата
tomas писал(а):
А вот для crc придется думать

И что там думать, посчитал CRC одного блока, подал на Init и перешел на подсчет следующего блока
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#20: 2011-04-07 23:32:19 ЛС | профиль | цитата
tomas писал(а):
Тест на 4гиговых образах показал:
ану проверь и сравни результаты. Нет у меня 4 гб файлов
http://forum.hiasm.com/forum_serv.php?q=56&id=2255
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26306
Рейтинг: 2146
#21: 2011-04-07 23:40:02 ЛС | профиль | цитата
Tad, а на чем писал Не принято, как-то, без схемы выкладывать
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#22: 2011-04-07 23:44:08 ЛС | профиль | цитата
на Delphii 7. Если алгоритм правильно считает, то выложу исходник. Кто захочет - загонит в компонент или в IC.
p.s. Мне лень
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26306
Рейтинг: 2146
#23: 2011-04-07 23:46:46 ЛС | профиль | цитата
Tad писал(а):
Кто захочет - загонит в компонент или в IC

А кто захочет Мне тоже лень, еще и работа по пакету есть
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#24: 2011-04-07 23:55:43 ЛС | профиль | цитата
Поживем - увидим.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 273
Рейтинг: 29
#25: 2011-04-08 08:26:15 ЛС | профиль | цитата
Tad писал(а):
ану проверь и сравни результаты

Работает. Шустро. Диск под 100%, память 10мб, проц 5-10%. Как и totalcmd.
crc правильная.

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

Вообще за эти 2 дня много скурил по crc и кажется понял суть.
Из любопытного - в нескольких источниках указывалось о параллельной обработке файлов. В обоих смыслах.
Чаще всего - предложение запускать несколько потоков, каждому из которых скармливать свой файл.
Но в паре источников упоминалось об обработке файла частями и обьединения crc всех частей в одну - вот это я пока не осилил.

карма: 0

0
Ответов: 273
Рейтинг: 29
#26: 2011-04-10 09:09:36 ЛС | профиль | цитата
Tad, делись исходником

Сам пока нашел интересный алгоритм на http://guildalfa.ru/alsha/node/2
Пробовал засунуть в инлайн - стандартный компилятор ругается на ассемблер, fpc не ругается, но не дает создать событие.
Пока дошел до такого:
Add(InlineCode,9593793,483,406)
{
WorkPoints=#33:doCRC32=Начинает вычисление CRC32|
EventPoints=#32:onCRC32=Выдает вычесленный CRC32|
DataPoints=#46:Data=Данные, для которых нужно вычислить CRC32|68:OldCRC32=CRC32 предыдущего фрагмента. Для первого фрагмента=FFFFFFFF|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|21:uses kol,Share,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|4: |34:// function CrcRefresh:cardinal;|30:// function CRCInit:boolean;|3: |9: public|3: |24: _data_Data:THI_Event;|28: _data_OldCRC32:THI_Event;|21: onCRC32:THI_Event;|68: procedure doCRC32(var _Data:TData; Index:word);//Вычисление CRC32|0:|5: end;|0:|14:implementation|1: |3:var|48: tbl: array[0..7] of array[0..255] of cardinal;|15: Init:integer;|77://···········································································|77://·····················http://guildalfa.ru/alsha/node/2······················|77://···········································································|0:|81:function CrcRefresh(OldCRC: cardinal; BufPtr: pointer; BufLen: integer):cardinal;|3:asm|15: test edx, edx|11: jz @ret|10: neg ecx|11: jz @ret|10: push ebx|6:@head:|12: test dl, 3|16: jz @bodyinit|23: movzx ebx, byte [edx]|10: inc edx|13: xor bl, al|13: shr eax, 8|25: xor eax, [ebx*4 + tbl]|10: inc ecx|12: jnz @head|10: pop ebx|5:@ret:|5: ret|10:@bodyinit:|15: sub edx, ecx|13: add ecx, 8|16: jg @bodydone|10: push esi|10: push edi|15: mov edi, edx|15: mov edx, eax|10:@bodyloop:|26: mov ebx, [edi + ecx - 4]|26: xor edx, [edi + ecx - 8]|15: movzx esi, bl|33: mov eax, [esi*4 + tbl + 1024*3]|15: movzx esi, bh|33: xor eax, [esi*4 + tbl + 1024*2]|13: shr ebx, 16|15: movzx esi, bl|33: xor eax, [esi*4 + tbl + 1024*1]|15: movzx esi, bh|33: xor eax, [esi*4 + tbl + 1024*0]|0:|15: movzx esi, dl|33: xor eax, [esi*4 + tbl + 1024*7]|15: movzx esi, dh|33: xor eax, [esi*4 + tbl + 1024*6]|13: shr edx, 16|15: movzx esi, dl|33: xor eax, [esi*4 + tbl + 1024*5]|15: movzx esi, dh|33: xor eax, [esi*4 + tbl + 1024*4]|0:|12: add ecx, 8|12: jg @done |0:|26: mov ebx, [edi + ecx - 4]|26: xor eax, [edi + ecx - 8]|15: movzx esi, bl|33: mov edx, [esi*4 + tbl + 1024*3]|15: movzx esi, bh|33: xor edx, [esi*4 + tbl + 1024*2]|13: shr ebx, 16|15: movzx esi, bl|33: xor edx, [esi*4 + tbl + 1024*1]|15: movzx esi, bh|33: xor edx, [esi*4 + tbl + 1024*0]|0:|15: movzx esi, al|33: xor edx, [esi*4 + tbl + 1024*7]|15: movzx esi, ah|33: xor edx, [esi*4 + tbl + 1024*6]|13: shr eax, 16|15: movzx esi, al|33: xor edx, [esi*4 + tbl + 1024*5]|15: movzx esi, ah|33: xor edx, [esi*4 + tbl + 1024*4]|0:|12: add ecx, 8|15: jle @bodyloop|14: mov eax, edx|6:@done:|14: mov edx, edi|9: pop edi|9: pop esi|10:@bodydone:|12: sub ecx, 8|10: jl @tail|9: pop ebx|5: ret|6:@tail:|30: movzx ebx, byte [edx + ecx];|12: xor bl,al;|12: shr eax,8;|25: xor eax, [ebx*4 + tbl];|10: inc ecx;|12: jnz @tail;|9: pop ebx|5: ret|6: end;|0:|77://···········································································|0:|18:procedure CRCInit;|3:var|14: c: cardinal;|16: i, j: integer;|6:begin;|27: for i:=0 to 255 do begin;|9: c:=i;|30: for j:=1 to 8 do if odd(c)|52: then c:=(c shr 1) xor $EDB88320|39: else c:=(c shr 1);|17: tbl[0][i]:=c;|8: end;|0:|27: for i:=0 to 255 do begin;|17: c:=tbl[0][i];|27: for j:=1 to 7 do begin;|39: c:=(c shr 8) xor tbl[0][byte(c)];|19: tbl[j][i]:=c;|10: end;|8: end;|49:// CrcRefresh($FFFFFFFF, @tbl[0,0], SizeOf(tbl))|16:// = $1A76768F);|8: end; |0:|77://...........................................................................|0:|59:procedure THiAsmClass.doCRC32(var _Data:TData; Index:word);|4:var |13:buff:string; |18:old,crc:cardinal; |12:len:integer;|5:begin|38://Рассчет таблиц - это очень накладно.|59://Потому выполняем его только если их уже/еще нет в памяти!|56://А теперь проверяем их наличие и вычисляем, если нужно:|45: If Init=0 then begin CRCInit; Init:=1; end;|16://Вычисляем CRC:|19://Грузим старую CRC|42: buff:=ReadString(_Data, _data_OldCRC32);|21: old:=Hex2Int(buff);|14://Грузим буфер|38: buff:=ReadString(_Data, _data_Data);|20: len:=Length(buff);|18://Обрабатываем его|35: crc:=CrcRefresh(old, @buff, len);|23: buff:=Int2Hex(crc,8);|18://Отдаем результат|27: _hi_OnEvent(onCRC32,crc);|6: end;|0:|77://···········································································|4:end.|
link(onCRC32,8882687:doMessage,[])
link(OldCRC32,4975099:Value,[])
}
Add(MainForm,2953706,350,350)
{
}
Add(Button,14533549,350,406)
{
Width=160
Caption="map"
link(onClick,1029845:doConvert,[])
}
Add(Message,8882687,532,406)
{
}
Add(CRC16_32,8038859,420,455)
{
}
Add(MemoryStream,14693252,420,350)
{
}
Add(StreamConvertor,1029845,420,406)
{
Mode=6
link(onResult,9593793:doCRC32,[])
link(Data,14693252:Stream,[])
}
Add(Memory,4975099,490,350)
{
Default=String(FFFFFFFF)
}


code_23293.txt
В MemoryStream предполагалось загрузить файл для отладки, но пока до этого не дошел.

С fpc тоже ситуация не радует - тогда и весь проект должен быть под fpc.
Варианты: Скомпилить под fpc dll с кодом и подключать ее когда надо либо исправить асм под стандартный компилятор либо разобрать алгоритм и переписать его под стандартный компилятор без ассемблера.
Все не веселые.

Да, мне с этими вариантами помощь не нужна - сам разберусь, если буду дальше этот алгоритм мусолить.
Все равно это муторно и занимаюсь этим не по необходимости, а от нечего делать Так что вам свое время тратить не стоит.


Вопрос пока такой:
с чего при создании событий fpc выдает Can't determine which overloaded function to call?
Пробовал
_hi_CreateEvent(_Data,@onCRC32,crc);
_hi_OnEvent(onCRC32,crc);
В обоих случаях ошибка та же. И указывает на строку с попыткой создать событие.
Просто пока хотелось бы погонять алгоритм хоть под fpc - оценить его скорость и работоспособность. Если действительно быстрый - попытаться оптимизировать.
карма: 0

0
Разработчик
Ответов: 26306
Рейтинг: 2146
#27: 2011-04-10 09:46:28 ЛС | профиль | цитата
tomas писал(а):
с чего при создании событий fpc выдает Can't determine which overloaded function to call?

У переменной crc тип Cardinal, а нужен, или Integer, или Real
карма: 22

0
Ответов: 273
Рейтинг: 29
#28: 2011-04-10 09:56:26 ЛС | профиль | цитата
Блин, точно
И ведь уже начал это исправлять - команду int2hex написал, и забыл
Да, все, теперь работает - просто crc заменил на buff при создании события.
карма: 0

0
файлы: 1code_23293.txt [5.5KB] [123]
Ответов: 16884
Рейтинг: 1239
#29: 2011-04-10 11:25:27 ЛС | профиль | цитата
tomas писал(а):
Tad, делись исходником

unit1.rar
------------ Дoбавленo в 11.25:
tomas, на будущее - для Delphi asm-коды заключать в операторные скобки (beginend)
#pas
function sum(x,y:integer):integer;
begin
asm
mov eax,x
add eax,y
mov result,eax
end;
end;
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1unit1.rar [2.5KB] [80]
Ответов: 273
Рейтинг: 29
#30: 2011-04-10 12:36:15 ЛС | профиль | цитата
Хорошо, спасибо.
карма: 0

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)