Scripts plugin
- Author
- Message
-
Offline
- Posts: 876
- Joined: Tue Jul 24, 2007 8:54 am
FeyFre
хмм, да, разбираться долговато. А какой вообще принцип, если на пальцах?
В принципе, именно оконную процедуру привязать - проблем никаких, а вот произвольный callback - даже не знаю, как это можно сотворить. Разве что сделать заглушку, в которой на асме разбирать стек в соответствии с указанным ранее набором параметров и вызывать подходящую функцию...
хмм, да, разбираться долговато. А какой вообще принцип, если на пальцах?
В принципе, именно оконную процедуру привязать - проблем никаких, а вот произвольный callback - даже не знаю, как это можно сотворить. Разве что сделать заглушку, в которой на асме разбирать стек в соответствии с указанным ранее набором параметров и вызывать подходящую функцию...
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
Ну вот там приблизительно так и делают при создании callback:В принципе, именно оконную процедуру привязать - проблем никаких, а вот произвольный callback - даже не знаю, как это можно сотворить. Разве что сделать заглушку, в которой на асме разбирать стек в соответствии с указанным ранее набором параметров и вызывать подходящую функцию...
1. Создаю заглушку на асме
2. При каждом создании callback выделяют кусок памяти с атрибутами выполнения.
3. Копируют туда заглшку.
4. В памяти в placeholder-ы заносят реальные адреса функций и инормацию о парметрах и скриптовом callback(контекст)
5. Адрес этой памяти дают куда просят.
Реально заглушка там простая - вызов опреденной С-функции с указателем на контекс которые выставили при создании.
С-функция с контекста достает инфу о параметра/возвращаемом значении и вызываемой скриптовой функции и соответвенно достаёт их со стека(стека параметров заглушки, а не своего), маршалит и вызывает скрипт.
-
Offline
- Posts: 3217
- Joined: Wed Nov 29, 2006 1:19 pm
- Location: Киев, Русь
- Contact:
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
VladSh
Не нужно будет городить огороды что-бы создавать окна и диалоги(как видишь, диалоги сейчас и с огородами не создаются).
Я в хотелке написал что оно даст.
Я бы был не против, если бы был бы прикручен IUP к плагину, но он сам весит огого, да и опять таки этот же костыль нужен для взаиодействия со скриптом(ибо биндингов на JS нету)
Не нужно будет городить огороды что-бы создавать окна и диалоги(как видишь, диалоги сейчас и с огородами не создаются).
Я в хотелке написал что оно даст.
Я бы был не против, если бы был бы прикручен IUP к плагину, но он сам весит огого, да и опять таки этот же костыль нужен для взаиодействия со скриптом(ибо биндингов на JS нету)
-
Offline
- Posts: 1862
- Joined: Mon Aug 06, 2007 1:07 pm
- Contact:
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
Instructor
Вопрос на засыпку:Читает знаковые данные или без знаковые? Собственно по остальным(DT_WORD, DT_DWORD) тот же вопрос.
Вопрос на засыпку:
Code: Select all
var data = AkelPad.MemRead(memoory, 5/*DT_BYTE*/);
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
Instructor
Это понимать, так:
В памяти лежит байт с HEX кодом 0xFF
После кода
В number что будет лежать: -1 или 255 ?
Это понимать, так:
В памяти лежит байт с HEX кодом 0xFF
После кода
Code: Select all
var number = AkelPad.MemRead(memory, 5/*DT_BYTE*/);
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
Код из Document_MemRead:
Только DT_BYTE unsigned, остальные signed. Если какие-то сложности возникают с типами, то вручную можно преобразовать:
Для DWORD:
Для WORD:
Для BYTE:
Code: Select all
else if (dwType == DT_DWORD)
{
vpData->vt=VT_I4;
vpData->lVal=*(DWORD *)nPointer;
}
else if (dwType == DT_WORD)
{
vpData->vt=VT_I2;
vpData->iVal=LOWORD(*(DWORD *)nPointer);
}
else if (dwType == DT_BYTE)
{
vpData->vt=VT_UI1;
vpData->bVal=LOBYTE(*(DWORD *)nPointer);
}
Для DWORD:
Code: Select all
if (nValue < 0) nValue+=0xFFFFFFFF + 1;
Code: Select all
if (nValue < 0) nValue+=0xFFFF + 1;
Code: Select all
if (nValue < 0) nValue+=0xFF + 1;
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
****
Пока писал в чём проблема, осенило что проблема в голове/кривых руках.(допиливаю zen coding)
****
А может лучше сделать DT_BYTE/DT_WORD/DT_DWORD беззнаковыми, и добавить знаковые варианты?
И значения этих констант зашить по аналогии с _TSTR, _TCHAR, _TSIZE ? А то каждый раз приходится лазить к доки что-бы вспомнить что использовать.
Пока писал в чём проблема, осенило что проблема в голове/кривых руках.(допиливаю zen coding)
****
А может лучше сделать DT_BYTE/DT_WORD/DT_DWORD беззнаковыми, и добавить знаковые варианты?
И значения этих констант зашить по аналогии с _TSTR, _TCHAR, _TSIZE ? А то каждый раз приходится лазить к доки что-бы вспомнить что использовать.
-
Offline
- Posts: 267
- Joined: Mon Mar 12, 2007 3:45 pm
Есть. Например, при включенной галочке "Сохранять при потере фокуса" в разделе AutoSave SaveFile-плагина... Вот если бы в AutoSave была соответствующая проверка - тогда я тоже за немодальность всех окон! А то сейчас очень раздражает, когда вызываешь окно Macros, и происходит массовое пересохранение всех открытых вкладок!...se7h wrote:разве есть моменты, когда без них не обойтись?
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
Изменено: теперь не используется libc.lib при компиляции.
Добавлено: методы MemStrPtr, WindowSubClass, WindowUnsubClass, ThreadHook, ThreadUnhook, SystemFunction().RegisterCallback, SystemFunction().UnregisterCallback.
Добавлено: возможность передавать в SystemFunction().Call строки напрямую в качестве констант.
Добавлено: необязательный параметр для GetAkelDir() позволяющий получить различные подпапки AkelPad'а.
Исправлено: некорректный переход к строке при ошибке в скрипте, если использовался перенос по словам.
Changed: libc.lib is no longer used when compiling.
Added: methods MemStrPtr, WindowSubClass, WindowUnsubClass, ThreadHook, ThreadUnhook, SystemFunction().RegisterCallback, SystemFunction().UnregisterCallback.
Added: possibility to pass in SystemFunction().Call strings directly as constants.
Added: optional parameter for GetAkelDir() that allows to obtain various AkelPad subfolders.
Fixed: incorrect movement to a error in the script, if word wrap used.
Scripts plugin v7.0
Добавлено: методы MemStrPtr, WindowSubClass, WindowUnsubClass, ThreadHook, ThreadUnhook, SystemFunction().RegisterCallback, SystemFunction().UnregisterCallback.
Добавлено: возможность передавать в SystemFunction().Call строки напрямую в качестве констант.
Добавлено: необязательный параметр для GetAkelDir() позволяющий получить различные подпапки AkelPad'а.
Исправлено: некорректный переход к строке при ошибке в скрипте, если использовался перенос по словам.
Changed: libc.lib is no longer used when compiling.
Added: methods MemStrPtr, WindowSubClass, WindowUnsubClass, ThreadHook, ThreadUnhook, SystemFunction().RegisterCallback, SystemFunction().UnregisterCallback.
Added: possibility to pass in SystemFunction().Call strings directly as constants.
Added: optional parameter for GetAkelDir() that allows to obtain various AkelPad subfolders.
Fixed: incorrect movement to a error in the script, if word wrap used.
Scripts plugin v7.0