Что нового

Создание dll для кодирования/декодирования xxe и uue

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
Версия AutoIt: 3.3.9.21

Описание: Создание dll библиотеки для кодирования/декодирования xxe и uue форматов для вызова функций в скрипте.

Примечания: Есть код скрипта кодирования форматов xxe и uue на Autoit - здесь создана тема, но было выяснено опытным путем, что код не может быстро обрабатывать данные для кодировки. (файл 100 кб -15 сек., а 500кб можно и не дождаться).
В предыдущей теме есть ссылки на ресурсы, где есть готовые коды на vba
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Andrey_A,
На AutoIt нельзя написать DLL, поэтому тему переношу в раздел Общение, может, кто-нибудь Вам поможет.
 

Naisho

Знающий
Сообщения
86
Репутация
12
Вообще было бы интересно заполучить хорошее описание процесса получения dll со своей функцией. В принципе на любом языке со свободным компилятором, желательно на основе SciTE. Направление - математика, массивы и регулярные выражения.
 
Автор
A

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
madmasles [?]
На AutoIt нельзя написать DLL, поэтому тему переношу в раздел
Я это прекрасно знаю, поэтому и спрашивал в предыдущей теме ...

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

InnI

AutoIT Гуру
Сообщения
4,922
Репутация
1,432
Andrey_A [?]
Это было написано тому, кому нужно описание процесса получения dll. Вам же нужна сама (готовая) библиотека, т.е. никакого описания процесса её создания, как я понял, не подразумевается.

И ещё. В той теме вы писали утилит полно, а нужен код для автоматизации. Теперь, если вам сделают dll, то придётся её везде таскать с собой. А раз так, то может присмотреться к готовым утилитам - какая разница, что таскать? Возможно, оно и быстрее будет и проще...
 

sims

Осваивающий
Сообщения
184
Репутация
24
Naisho [?]
Вообще было бы интересно заполучить хорошее описание процесса получения dll со своей функцией.
Языков существует много. DLL можно создавать например на С++, Дельфи, многих бейсиках (FreeBasic, PowerBasic, PureBasic) и др. языках.

В прикрепленном файле небольшая статья по теме.

желательно на основе SciTE.
Конкретно по умолчанию SciTE используется как IDE для небольшого числа ЯП. Почему именно этот редактор? Возможно что под SciTE подразумеваете Scintilla?
 
Автор
A

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
Вам же нужна сама (готовая) библиотека, т.е. никакого описания процесса её создания, как я понял, не подразумевается.

Каждый из нас в чём-то лучше разбирается, в чём-то меньше... Я dll библиотеки не создавал, и поэтому задал вопрос к тем, кто это умеет и имеет желание помочь.

InnI [?]
Теперь, если вам сделают dll, то придётся её везде таскать с собой. А раз так, то может присмотреться к готовым утилитам - какая разница, что таскать? Возможно, оно и быстрее будет и проще...

Разница большая. Заданная библиотека должна возвращать строку кодирования, как это делает Crypt32.dll и другие...
А с этой строкой можно уже работать... объединять, автоматизировать с другими процессами...
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
В данном примере кода вычислительные мощности тратятся на структурирование вызова dll,
тут можно это решить создав отдельную программу, которая будет уже заниматься перекодированием и выдавать результат в текстовый файл, который уже будет читать ваша основная программа.
 
Автор
A

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
winstan [?]
данном примере кода вычислительные мощности тратятс

А как же _Encoding_Base64Encode($sData) ?
Передаются данные в dll... возвращается кодированный текст


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

winstan

Эксплотатор)
Сообщения
406
Репутация
79
Andrey_A [?]
Такие программы уже есть... необходимо передавать в скрипт
А вот из текстового файла просто прочитать данные в скрипт и всё :-X

ну или весь код программы переписывать на компилируемый язык если вам так сильно требуется скорость
 
Автор
A

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
winstan , программы создаются, чтобы работать отдельно, а dll , чтобы помогать в работе программ. Тот , кто может написать программу и выводить в текстовый файл информация, тому не составит труда сделать dll и выводить в скрипт...
 

winstan

Эксплотатор)
Сообщения
406
Репутация
79
Andrey_A [?]
программы создаются, чтобы работать отдельно, а dll , чтобы помогать в работе программ
Как жесток мир но это не совсем так, вы понимаете зачем вообще начали отделять dll от основной программы?
Какой именно вы код хотите использовать для кодирования\декодирования? а то в первый раз я обратил внимаие только а первый и он оптимизации не поддасться.
 
Автор
A

Andrey_A

Продвинутый
Сообщения
323
Репутация
68

winstan

Эксплотатор)
Сообщения
406
Репутация
79
хм VBA к сожалению я его не знаю и переписать не смогу, но на сколько я знаю он тоже не компилируемый и dll из него не сделать.
 

sims

Осваивающий
Сообщения
184
Репутация
24
Попробуйте dll.
В ней пока только функция кодирования.
Код:
bin2xxe(*Src, Size, Fname$)
Функции нужно передать указатель на данные, размер данных в байтах и строку с именем (по большому счету без разницы что в ней содержится). Функция вернет строку с закодированными данными.

Напишите с какой скоростью она работает.
 
Автор
A

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
sims [?]
Пишет: вы не можете зайти в этот раздел... может куда-то ещё выложить?

И ещё просьба - можно пример обращения к функции для чайников.. :'(
 

sims

Осваивающий
Сообщения
184
Репутация
24
У меня скорость обработки составила примерно 20 миллионов символов в секунду.

Что за баг такой не позволяющий скачивать вложения и править посты с ними?
DLL на фйлообменике. http://rghost.ru/52399233


Добавлено:
Сообщение автоматически объединено:

Пример использования.
Код:
$Test="12345"
$return=DllCall("xxe.dll", "str", "bin2xxe", "str", $Test, "int", 5, "str", "blablabla")
MsgBox(0, "", $return[0], 0)

Файлы. http://rghost.ru/52399666
 
Автор
A

Andrey_A

Продвинутый
Сообщения
323
Репутация
68
sims, спасибо за dll !!!
Работает, но выдает на любого размера файлов - небольшой кусок вида:
Код:
begin 644 hhh.txt
3A5UoF1+
+
end

Делаю так, может что не так?

Код:
$FileName=$CmdLine[1] 
$hFile=FileOpen($FileName,16)
$Data=FileRead($hFile)
FileClose($hFile)
$Name=StringRegExpReplace($FileName,'(^.*)\\(.*)$','\2')

$bin2xxe=DllCall("xxe.dll", "str", "bin2xxe", "str", $Data, "int", 5, "str", $Name)

$hFile=FileOpen('W:\Test\77\Test.xxe',8+2)
FileWrite($hFile,$bin2xxe[0])
FileClose($hFile)


+ выкладываю объединённый , чтобы про uue не забыть.

Код:
; $FileName - имя файла
; $E_U - 0 в xxe, 1 - в uue
Func _Encoding_XXE_UUE($FileName,$E_U)
    $hFile=FileOpen($FileName,16)
    $src=FileRead($hFile)
    FileClose($hFile)
    Switch $E_U
      Case 0 ; xxe
        $sLineX='+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
        $SymX='h'
        $SymB='+'
      Case 1 ; uue
        $sLineX='`!"#$%&'&"'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_"
        $SymX='M'
        $SymB='`'
    EndSwitch
    Local $n=BinaryLen($src),$i=0,$s,$xxe=StringSplit($sLineX,'',2),$aSym[$n+1]
    While $i<=$n
        $iDec=Dec(Hex(BinaryMid($src,$i+1,1)))
        Switch Mod($i,3)
            Case 0
                $aSym[$i]=$xxe[Int($iDec/4)]
                $t=BitAND($iDec,3)*16
            Case 1
                $aSym[$i]=$xxe[$t+Int($iDec/ 16)]
                $t=BitAND($iDec,15)*4
            Case 2
                $aSym[$i]=$xxe[$t+Int($iDec/ 64)]&$xxe[BitAND($iDec,63)]
                $t=0
        EndSwitch
        If Mod($i,45)=44 Then $aSym[$i]=@CRLF&$SymX
        $i=$i+1
    WEnd

    $s=_ArrayToString($aSym,'')
    
    If Mod($n+1,3)<>0 Then $s&=$xxe[$t]
    $t=Mod($n,45)+1
    If $t<>45 Then
      $k=StringInStr($s,@CRLF,0,-1)
      If $k Then
        $s=$SymX&StringLeft($s,$k)&$xxe[$t-1]&StringMid($s,$k+3)&$SymB&@CRLF
      Else
        $s=$xxe[$t-1]&$s&$SymB&@CRLF
      EndIf
    EndIf
    $s='begin 644 '&StringRegExpReplace($FileName,'(^.*)\\(.*)$','\2')&@CRLF&$s&$SymB&@CRLF&'end'&@CRLF&$n&' bytes'&@CRLF
    Return $s
EndFunc   ;==>_Encoding_XXE_UUE
 

sims

Осваивающий
Сообщения
184
Репутация
24
Andrey_A [?]
может что не так?
Да. Описание функции. http://autoit-script.ru/index.php/topic,16018.msg99158.html#msg99158
Второй параметр это размер данных.
В примере он задан жестко и равен 5, т. к. такой размер строки. Нужно в этом параметре указать размер данных, переданых функции.
 
Верх