Исходники здесь
Вот такие скомпилированные версии есть у меня.
Ниже данные устарели.
Репозиторий находится тут (открывать через SVN клиент)
Удобный просмотр репозитория через браузер тут
Скомпилированные версии тут Пароль к архиву: coderx.ru
Есть ли предложения по модернизации существующего кода с описанием как должно и что хотелось бы заменить/добавить?
Дополнительные компоненты брать тут. (<-- TPerlRegEx есть только там)
/upd:
для компиляции последних ревизий понадобятся JCL, JVCL (ссылки выше) а так же:
jwapi2.2a, SyntEdit, TRichView.v11.0+ScaleRichView.v2.0, TsiLang (letitbit / upload.com.ua)
Немного подправленный FastScript искать в файловом архиве.
Последний раз редактировалось NLObP, 17.10.2016 в 00:02.
RoZ, дело в том что если преобразовывать String в PChar то получается просто указатель на первый символ строки, а вот если наоборот PChar в String, то надо перед первым символом ещё разместить счётчик ссылок и длинну строки, поэтому строка при этом копируется и получается что если есть переменная p типа PChar, то PChar(String(p))<>p
А может быть что "новый" String из PChar он создаёт в адресном протранстве DLL так как память первоначально была выделена под PChar там же? Впрочем всё это мои домыслы, пока буду разбираться в Дельфи дальше, авось чего еще и раскопаю..
З.Ы. Кому интересно можно прочитать про похожую ситуацию вот тут http://forum.sources.ru/index.php?showtopic=98659# хотя она и не подходит на 100%. Завтра попробую переписать функцию по другому, как там советуют, хотя из меня Дельфист тот ещё...
function HexToString(Hex:String):String;
function StringToHex(str1,Separator:String):String;
а так же в качестве демо-плагина теперь простенький автоюзатель НР бутылок
Добавлено через 42 минуты RoZ, почитал я ту статью, действительно проблемы возникнуть могут, но не из за того что ты описал а если память освободиться между присвоением значения строке в длл и копированием строки в программе, а это на мой взгляд произойти практически не может...
вот не большое исследование в дебагере
выполняется в программе:
Код:
phxPlugins.pas.143: Info:=String(GetPluginInfo(version));
004928EF 6801000403 push $03040001 ;кладём в стек параметр version
004928F4 FF5618 call dword ptr [esi+$18] ;вызываем GetPluginInfo
прыгаем в плагин:
Код:
plugin_demo.dpr.23: Result:='Демонстрационный Plugin к программе l2phx'+sLineBreak+
0141459F B830464101 mov eax,$01414630 ;записываем в результат ссылку на текст
plugin_demo.dpr.26: end;
014145A4 5D pop ebp ;неважно
014145A5 C20400 ret $0004 ;возврат в программу
возвращаемся в программу:
Код:
004928F7 8BD0 mov edx,eax ;переносим результат GetPluginInfo в другой регистр
004928F9 8D4608 lea eax,[esi+$08] ;записываем в регистр eax адрес Info
004928FC E86B29F7FF call @LStrFromPChar ;преобразуем PChar из edx в String помещая его в Info
__________________
Я здесь практически не появляюсь!, Skype - ikskor
Последний раз редактировалось xkor, 07.10.2008 в 01:01.
Причина: Добавлено сообщение
О_о пипл бы хотел думаю получить скомпилированный файл анонс версии был, а первый пост не кто не перебил. лично я вдс клиент ставить не буду ибо руки кривые.
плагинную поддержку бы ещё доделать немног перед выкладыванием, возможны небольшие но коренные так сказать изменения из за которых "старые" плагины будут работать не верно...
__________________
Я здесь практически не появляюсь!, Skype - ikskor
ммм, народ stdcall можете заменить на cdecl ? Или должен использоваться именно stdcall ? Просто для совместимости с DLL написанной на С++ необходимо...или нереально ?
З.Ы. GetPluginInfo переделал на более безопасный вызов, вечером выложу на ваше рассмотрение.
Последний раз редактировалось RoZ, 09.10.2008 в 09:44.