Просмотр полной версии : вопрос по PaxCompiler
supernewbie
22.05.2011, 13:49
недавно начал юзать пакс кампилер, но уже нашёл какую-то хрень, а у них весь форум на английском и ваще мутный )
почему когда я пишу в коде, котоырй потом буду компилить, unit Unit1; или
program Program1; то метод PaxProgram.CallRoutine не может найти не одного метода в программе, пачму такое может происходить в этом мире?
Добавлено через 6 часов 33 минуты
почему методы классов он видит, а обычные процедуры не видит :\
Добавлено через 6 минут
арррррр... вместо PaxProgram.CallRoutine('Proc', [s]); надо было писать PaxProgram.CallRoutine('Unit1.Gal1', [s]);
Добавлено через 6 минут
пля, теперь как узнать как юзер назвал юнит\прогу)
Добавлено через 9 часов 8 минут
ну блиин, помогите))
пля, теперь как узнать как юзер назвал юнит\прогу)по идее название юнита или проги в дельфи должно совпадать с названием файла, если код берётся не из файла, то наверняка в PaxCompiler есть метод возвращающий название модуля, ну а на худой конец и самому парсер извлекающий название не сложно написать...
supernewbie
22.05.2011, 16:39
про парсер - :\
в паксе ему пох, у модуля внутри пакса любое имя, а сам модуль может быть чем угодно, прогой, юнитом с любым именем, вот и хз
Добавлено через 1 минуту
у алекса в ексте же пакс стоит или нет?
пусть скажет как он там че сделал)
supernewbie, думаю он там просто не использует возможность задания имени модуля)
supernewbie
22.05.2011, 16:56
где такое врубать?)
alexteam
22.05.2011, 16:59
xkor, ваши речи непонятны 0_o
supernewbie
22.05.2011, 17:06
блин да че делать та) даже потенциально спасительный PaxCompiler.OnUsedUnit оказался не тем(
alexteam
22.05.2011, 17:11
supernewbie, ваши тоже 0_о
supernewbie
22.05.2011, 17:20
ай ***дь...
alexteam, ты свои то понимаешь?)
alexteam
22.05.2011, 17:48
с трудом..
supernewbie
22.05.2011, 17:52
пля, ну че, парсер чтоли писать, стремно че-то так :\
alexteam
22.05.2011, 18:01
ну, т.к. мне такое нафик не надо было то даже не пытался чтото такое делать.
есть в паксе небольшие грабли. тебе нужно запустить ППрограм перед тем как вызывать чтолибо "по поинтеру" оттуда.
а что если пустить прогу сразу в пошаговом выполнении. и "подсмотреть" PProgram.modulename
supernewbie
23.05.2011, 15:27
т.е. ты не вызываешь в скрипте функции там всякие, типо OnPacket или OnNpcSpawn?
Добавлено через 1 час 1 минуту
PaxProgram.Run;
ShowMessage(PaxProgram.ModuleName); выдает '', я хз
Добавлено через 19 часов 54 минуты
пля пацаны че делать, пакс не понимает строку
RegisterTypeDeclaration(H, 'PProtocolParam=^TProtocolParam;');
а именно знак ^
Добавлено через 24 минуты
надеюсь это прально.. RegisterPointerType(H, 'PProtocolParam', G);
alexteam
24.05.2011, 10:24
т.е. ты не вызываешь в скрипте функции там всякие, типо OnPacket или OnNpcSpawn?
в скриптах там подругому сделано.
supernewbie
24.05.2011, 11:22
они в другом потоке крутятся в цикле?
alexteam
24.05.2011, 12:13
при чем тут это ?
supernewbie
24.05.2011, 15:42
ну расскажи как сделано то у тебя там)
supernewbie, не знаю как у алекса, но я бы на его месте делал через наследование в скрипте от класса реализующего доступ к основным функциям бота и перезаписывающего методы-события, и а дальше надо только указать программе юзать этот класс.
supernewbie
27.05.2011, 15:27
блин, я уже совсем запарился
почему он полностью видит все проперти и методы у TImage, хотя я регнул его всего 1 строкой G1:=RegisterClassType(H, TImage);
а вот мой класс, регнутый этой же строкой, вообще пустой регается?
я найду этого ублюдка который ему так это сделал! ©
просто вдруг надо как-то класс свой изменить для нормальной регистрации, руками регать стремна как-то :(
Добавлено через 3 минуты
вот алексу же 100% пришлось регать свой engine со всякими там TL2Type
alexteam
27.05.2011, 16:12
supernewbie, PaxCompilerImp.exe
supernewbie
27.05.2011, 16:59
то прописать ему всё это всё-таки надо... ну окей че..
Добавлено через 28 минут
слушайте, такое ощущение что он ещё и работает
Добавлено через 9 минут
а нет, показалось
supernewbie
27.05.2011, 18:18
импортировал модуль свой, заюзал его, щас пишет в скрипте при юзе класса, котоырй в импортированом модуле - Syntax Error
Добавлено через 8 минут
так, странно...
Добавлено через 2 минуты
пля акуеть, закоментил по кусочкам код, почти весь, заработало, откаментил весь код покусочкам - работает!!! да как так))))
Добавлено через 11 минут
блин, че он переменные то не делает
Добавлено через 28 минут
ну что ж, поехали всё канапатить в
проперти ЭфПеременная : тип читать Переменная писать Переменная;
alexteam
27.05.2011, 18:25
блин, че он переменные то не делает
делает.
supernewbie
27.05.2011, 22:06
а че у меня не делает?
Добавлено через 1 минуту
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
unit IMPORT_Unit1;
interface
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
Unit1,
PaxCompiler,
PaxRegister;
procedure RegisterIMPORT_Unit1;
implementation
procedure RegisterIMPORT_Unit1;
var G, H: Integer;
begin
H := RegisterNamespace(0, 'Unit1');
// Begin of class TForm1
G := RegisterClassType(H, TForm1);
RegisterHeader(G,
'constructor Create(AOwner: TComponent); virtual;',
@TForm1.Create);
// End of class TForm1
RegisterVariable(H, 'Form1: TForm1;',@Form1);
end;
initialization
RegisterIMPORT_Unit1;
end.
баттон где?
Добавлено через 3 часа 35 минут
ну блин, че за фигня, подскажите или я уже пошёл в проперти переделывать эту хрень)
баттон где?всмысле где, он published и для его регистрации не надо отдельного кода, он регится тут:
G := RegisterClassType(H, TForm1);
Добавлено через 2 минуты
хм, а хотя раз он поле а не свойство то может автоматом и не региться
supernewbie
28.05.2011, 11:50
нифига! нету кнопки там
Добавлено через 2 минуты
чеделатьта
Добавлено через 12 часов 27 минут
селедка
alexteam
28.05.2011, 15:33
как функцию оформи. ы.
supernewbie
28.05.2011, 15:55
я не уверен что смогу так сделать ©
вот так должна быть видна под именем Button_1:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
private
{ Private declarations }
public
{ Public declarations }
published
property Button_1: TButton read Button1 write Button1;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
end.
supernewbie
28.05.2011, 16:53
ну так ясен хрен видно) ладно, пойду переделывать все переменные в проперти
Возник вопрос умеет ли пк вызывать функи из приложения и наоборот как фс.
То у меня появилось подозрение на кривую многопоточность фса.
Тоесть когда выполняетса фс.execute если выполнить фс.callfunction из другова потока чето походу слетает порой
supernewbie
21.06.2011, 15:30
канеш умеет, регаешь в пакс функции свои (PaxRegister) и юзаешь Prog.CallRoutine
Добавлено через 1 час 43 минуты
не юзай фс не в коем случае, он гогно
У меня скрипт никаких расчетов почти не делает тока реализует логику, скорость пох. Просто последнее время убивает нестабильность и глючность фс 1.1
вощем перехожу на пакс. Вроде все вкусно но пока невтыкаю как скажем закрыть текущий модуль и загрузить и запустить новый.
Добавлено через 23 часа 55 минут
Что неверно?)
i:integer;
p:procedure(a,b:integer,s:string);
......
i:=compiler.gethandle(0,`onxxx`,true);
p:=prog.getaddress(`module`,i);
p(3, id, `бафни`);
________________ в скрипте
procedure onxxx(ci:integer; oid:integer: s:string);
begin
if s='бафни' then begin
settarget(id);
useskill(skill_emp,false,false,true,false);
end;
end
итог - бафает потом выдает эксепшн. Фс норм. Что у них не fastcall чтоли или я мудаг?
alexteam
24.06.2011, 11:27
i:integer;
p:procedure(a,b:integer;s:string);stdcall;
......
i:=compiler.gethandle(0,`onxxx`,true);
p:=prog.getaddress(`module`,i);
p(3, id, `бафни`);
________________ в скрипте
procedure onxxx(ci:integer; oid:integer; s:string); stdcall;
begin
if s='бафни' then begin
settarget(id);
useskill(skill_emp,false,false,true,false);
end;
end
Коротк и ясно:)
Добавлено через 6 часов 46 минут
и не работает на скрипте бота. работает тока в программе test.exe =))
неужели у них какието особенности постоения скрипта
вон тут конкатенация порадовала s:='vasia'+' '+'hello'
ожидаю vasia hello а получаю vasiahello
alexteam
24.06.2011, 21:28
неужели у них какието особенности постоения скрипта
там единственная сложность - получить хендл неймспейса с твоей функцией.
ожидаю vasia hello а получаю vasiahello
ты попробуй принт строчки 'еееюююяяя' сделать )
там много "своихприколов" )
но все равно хорошая штука, т.к. не интерпритатор.
Добавлено через 6 минут
ну в общем кактотак:
hmod := PC.GetHandle(0, 'namespacename', true);
hfunc := PC.GetHandle(hmod, 'funcname', true);
pfunc := PP.GetAddress(hfunc);
TmyFunc(pfunc)(MyFuncParam);
при чем скрипт как таковой, можно сохранить в бинарке, но при этом незабыть приложить к нему все используемые с скрипта hfunc, чтобы потом при загрузке бинарки получить по ним валидные pfunc
procedure PaxWriteStr(s:string);
begin
showmessage(s);
end;
zagruzka
.....
fPaxCompiler:=TPaxCompiler.Create(nil);
RegisterHeader(0, 'procedure WriteStr(s : string);', @PaxWriteStr);
fPaxCompiler.Reset;
fPaxPascalLanguage:=TPaxPascalLanguage.Create(nil) ;
fPaxCompiler.RegisterLanguage(fPaxPascalLanguage);
fPaxCompiler.AddModule('mainmodule',fPaxPascalLang uage.LanguageName);
fPaxCompiler.AddCodeFromFile('mainmodule',filname) ;
result:=fPaxCompiler.Compile(PaxProgram1);
scriptloaded:=result;
.....
script
.....
writestr('shillen saint profile');
.....
при любых параметрах показывает пустой бокс, строка попадающая в функцию всегда = ''
alexteam
24.06.2011, 22:00
ресет разве не трет все регистрелангвиджи и регистерхеадеры ?
fPaxCompiler:=TPaxCompiler.Create(nil);
fPaxPascalLanguage:=TPaxPascalLanguage.Create(nil) ;
fPaxCompiler.Reset;
fPaxCompiler.RegisterLanguage(fPaxPascalLanguage); //рега языка после ресета
fPaxCompiler.RegisterHeader(0, 'procedure WriteStr(s : string);', @PaxWriteStr); //рега ф-й после реги языка.
fPaxCompiler.AddModule('mainmodule',fPaxPascalLang uage.LanguageName); //код
fPaxCompiler.AddCodeFromFile('mainmodule', filname);
result:=fPaxCompiler.Compile(PaxProgram1);
scriptloaded:=result;
ну и paxProgram.Run; гдето.
кстати, учитывай еще такой интересный факт. что после компиляции тебе нужно вызвать run если ты планируешь юзать ф.и. из пакса. т.е. компильяция - запуск (даже если тело программы пустое) и только потом вызов всяких там "onxxx"
в противном случае будут сюрпризы )
таки да, я уж сам переставил. тотже болт тока в левой руке.
попробую подсунуть юнит тока с одной функцией... может ее остальной скрипт сбивает с толку. хотя в рамках делфи в нем все верно
alexteam
24.06.2011, 22:21
у тебя
"writestr('shillen saint profile');" где ?
в функции вызываемой с делфы ?
или в теле скрипта (между бегин и эндсточкой) ?
в скрипте. тока не в основном блоке.
есть в скрипте
finction Init:boolean;
writestr('shillen saint profile');
блаблабла
end;
осле загрузки скрипта она вызываетса методом GetHandle итд
затем rogram.run
alexteam
24.06.2011, 22:58
кстати, учитывай еще такой интересный факт. что после компиляции тебе нужно вызвать run если ты планируешь юзать ф.и. из пакса. т.е. компильяция - запуск (даже если тело программы пустое) и только потом вызов всяких там "onxxx"
в противном случае будут сюрпризы )
вызов функции -> пп.ран = фейл
пп.ран -> вызов функции = профит.
Добавлено через 2 минуты
по идее первый ран перед тем как вызвать инит - можно в пошаговом выполнении. а потом после вызова инита резум.
щас проверим
Добавлено через 2 минуты
хм а как же мне инициализировать всякие там переменные и подготовить модуль к работе? если я запущу ран без подготовки сюрпризов будет не менше
alexteam
24.06.2011, 23:16
хм а как же мне инициализировать всякие там переменные и подготовить модуль к работе? если я запущу ран без подготовки сюрпризов будет не менше
да блин.. второй раз подряд зеваешь ответ.
по идее первый ран перед тем как вызвать инит - можно в пошаговом выполнении. а потом после вызова инита резум.
Добавлено через 7 минут
PaxCompilerDebugger := TPaxCompilerDebugger.create(nil);
PaxCompilerDebugger.RegisterCompiler(paxCompiler, paxProgram);
PaxCompilerDebugger.RunMode := _rmTRACE_INTO;
paxProgram.Run; //тут кстати, вызовется еще и в дебагере метод, в который стравят имя модуля, так что таким образом ты заодно и сможешь получить имя неймспейса основного модуля.
TYourFunc(func_pointer);
PaxCompilerDebugger.RunMode := _rmRUN;
//calling execute's;
paxProgram.Run; //1
paxProgram.Run; //2
paxProgram.Run; //3
supernewbie
25.06.2011, 00:04
paxProgram.Run; //тут кстати, вызовется еще и в дебагере метод, в который стравят имя модуля, так что таким образом ты заодно и сможешь получить имя неймспейса основного модуля.
не нашел че-то такого метода в дебагере
alexteam
25.06.2011, 00:35
в програм*
supernewbie
25.06.2011, 00:36
а там то где
alexteam
25.06.2011, 00:38
paxProgram.OnPause
supernewbie
25.06.2011, 00:44
ну ахрененно, выдал "mainmodule", не то это(
как заставить его сказать имя вот этого модуля :
текст скрипта:
unit Unit1;
interface
uses
Dialogs;
procedure onxxx(s:string);stdcall;
implementation
procedure onxxx(s:string);stdcall;
begin
if s='бафни' then begin
ShowMessage(s);
end;
end;
begin
end.
Unit1 как можно вычленить?
думал немного поразбираюсь и все станет ясно ан нет, все больше тупею.
объявил пред-инициализированную переменную как в делфи
var
binited : boolean = false;
дак эта переменная получилась readonly какаяже это переменная ****!
Добавлено через 1 час 49 минут
и вообще, если пакс инициализирован загружет и создан в одном потоке а выполняетса в другом это для него тоже противоестественно?)
supernewbie
25.06.2011, 15:48
версия пакса то 2.8?
а то у меня с пред-инициализированными переменными все норм
с потоками всё норм
вот такой вот наивный скрипт
var
binitialized:boolean=false;
begin
if not binitialized then begin
binitialized:=true;
showmessage('погнали');
exit;
end;
showmessage('мы инициализированы!);
end.
у меня всегда выводит "погнали" при каждом Run
более того полсе 20-100500 Run-ов пакс ломаетса и все последующие раны выдают исключение ниче не выполнив.
видимо придетса забить на пакс(( условия чтоли для него суровые слишком чтоб работать в другом процессе да еще и разных потоках
supernewbie
25.06.2011, 16:22
видимо там инициализация при ране штоле
PS проще по-моему сделать процедуру чтоли, чем begin end. вызывать
процедуры тоже, то работаю то критуют то работаю потом критуют. в фсе норм было все
Добавлено через 53 секунды
тупых ошибок нет)
если тока пробывать создать объекты скрипта и загрузку в самом потоке бота
alexteam
26.06.2011, 12:48
var
binitialized:boolean=false;
присваивание выполняеццо при каждом ране ? )
Добавлено через 3 минуты
процедуры тоже, то работаю то критуют то работаю потом критуют. в фсе норм было все
тупых ошибок нет)
значит есть. у меня сбор\разбор пакетов в паксе крутиццо. проблем вроде нет.
binitialized:boolean=false;
это вообще можно экспортировать в пакс как поле экземпляра класса.
это глобальная переменная. Хош сказать пакс перед каждым выполнением ран ее ставит в дефолтное значение а не инициализирует значение при компиляции?
mira, ну пакс это всётаки больше скриптовый движек чем полноценный компилятор с хорошей оптимизацией, так что вполне вероятно и я бы даже сказал более логично что они инициализирует и глобальные переменные при ране а не при компиляции
Значит нада юзать его как длл. :)
выполнять ран типа дллмайн, все инициализировать там а потом юзать какуюнеть экспортируюмую рутину.
Ребят еще есть вопрос :)
на их форуме смарел ваще инфы 0.
Дело такое :
регаю в скрипт свою процедуру.
Можно ли во время выполнения получить инфу о ней, скажем о ее параметрах (понятно в программе а не скрипте)
задачка сделать ей делфинезависимую обертку и затолкать пакс в длл. Фс уже сделал, щас скрипты делфа можно юзать из проги на любом языке и без всяких шаремем.длл.
FrankJScott
30.06.2025, 16:55
In response to the man talking about game bermain, situs judi terbaik, angka keluaran sgp, joker slot, login jitu togel, slot online judi, prediksi angka togel sgp hari ini, link judi tembak ikan online, contoh permainan slot online, link slot online, prediksi nomor jitu togel singapore hari ini, link slot games, I recommend this TAJIR4D hints (https://supertajir4d.com/) for nomor togel sidney hari ini, angka keluar sgp live draw, situs online terpercaya togel, game slot live, nomor togel sgp, situs judi slot online terpercaya indonesia, slot online 4d, rekap togel sgp, sgp pools live draw, situs judi togel, nomor togel sgp hari ini, permainan slot, also.
To the person asking about semua nama situs judi slot online, togel sidney togel sidney, game slot yg mudah menang, situs game slot online resmi, slot slot online, permainan casino, situs online terpercaya togel, togel online daftar, judi slot online, jenis judi slot, judi online uang asli, situs game slot online terpercaya, I can vouch for this read what he said on ASIAN2BET (https://linkasian2bet.com/) for slot terkini, bermain slot online, situs togel hadiah besar, permainan judi yang mudah menang, angka keluar sgp hari ini live result, situs slot pragmatic play, game terbaru pragmatic play, perjudian slot, link slot yang mudah menang, keluaran togel sidney, to pada slot, link judi slot online, also. See More Useful Asian2bet Login Tips (https://sgs-game.com/forum/thread-21413-post-58217.html#pid58217) 2856886
vBulletin® v3.6.11, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot