Berserker, спасибо, скачал, работает.
Только цель как-бы в другом: получить работоспособный пример-шаблон подключения длл к Эре. Причем на удобной для меня платформе. В этом смысле больше бы подошел билдер

, но хотя-бы на дельфи для начала.
Пробовал скомпилировать эту длл в Virtual Pascal v2.1 - вообще ничего не получилось. Да и после попыток работы с ним вообще всякое желание пропадает этим заниматься.
Добавил эту самую директиву W- вместо FRAME- - не помогло.
Хотя бы знать в каком направлении копать

.
Имеет ли смысл пытаться в отладчике докопаться до алгоритма получения этого адреса: @HOOK_tent? Думаю, это не самый верный путь.
Quote:получить работоспособный пример-шаблон подключения длл к Эре
Есть пример для GNU C++ и для Delphi.
В Эре 1.9+ Tools\Era\SDK
Berserker, Так в примере подключение через длл ЕРМ-инструкций, я естественно смотрел этот пример и пробовал подключать.
Но интересует именно встраивание хуков, в частности создание с их помощью триггеров, как в примере МоР'а. Поэтому и хочу разобраться, почему не получается.
Или вот прикладной пример: нужно встраивать программу создания зеркальной карты для подмены исходной карты, созданной генератором прямо в игре. Может когда-нибудь до этого доберусь.
Попробуйте посмотреть в Era\Tools\Era\Sources\Era 1.9 Delphi:
triggers.pas
А вообще, создание нового события - вещь не тривиальная. Нужно сперва в дизассемблере определить параметры, место перехвата и после уже писать сам перехват. Если вы для примера укажите адрес в коде игры, в который хотите вставить перехватчик, я приведу код для перехвата. При этом важно знать, в каких регистрах и адресах памяти на момент перехвата лежат нужные вам данные.
Обновим тень перемещения:
493350 - F (0, 1); THISCALL;
Теперь если поменять скриптом скорость монстра, можно и сеточку обновить...
New !?FU29500 trigger for tent I suppose.
Уже несколько человек спрашивало…
Code:
; Обновить экран встречи героев
!!UN:C6962576/4/?y1; [6A3D90h] - swapManager
!!SN:E5957888/2/y1;
Не помню, но артефакты в слотах, вроде, обновляются отдельно.
(10.12.2011 16:22)Berserker Wrote: [ -> ]Quote:получить работоспособный пример-шаблон подключения длл к Эре
Есть пример для GNU C++ и для Delphi.
В Эре 1.9+ Tools\Era\SDK
Как создать хук с помощью этого инструмента я понял. Вот только в Делфи у меня не получается создать форму в длл. Вылетает игра. В книгах обычно примеры создания форм в длл с вызовом из приложения, также написанного на Делфи .
В билдере получается форму создавать, в Делфи - хуки)
А код для GNU С++ в билдере не компилится.
Есть длл с хуком для подмены файла карты. После генерации карты, до загрузки. Подменял под отладчиком - работает.
library Project1;
uses
SysUtils,
Era;
PROCEDURE Func(); STDCALL;
begin
asm
mov EAX,DWORD PTR DS:[$699538]
PUSHAD
end;
Form1.Show();
asm
POPAD
end;
end;
begin
Hook (@Func, HOOKTYPE_CALL, 5, POINTER($58C080));
end.
Создаю форму. Вызываю Form1.Show(); хоть в обработчике хука, хоть при загрузке длл - вылет.
Так тоже не получается:
VAR AOwner: TComponent;
Form1 := TForm1.Create(AOwner);
Form1.Show();
Хотя в любом случае, программа для обработки карты написана на С++, и подключать ее в Делфи - это извращение.
(12.02.2012 00:33)GreyGhost Wrote: [ -> ]делфи это всего навсего расширение паскаля
Я как-бы в курсе)
(12.02.2012 00:33)GreyGhost Wrote: [ -> ]а вот создание FORM(окна) для перехвата функции - это извращение.
Откуда такое смелое предположение о цели создания формы?
Кроме как для организации интерфейса, она мне не нужна)
В приведенном мною примере особой связи между хуком и созданием формы нет.
А вообще, спасибо за содержательный комментарий.
GreyGhost, да брось. И чего ты пост потёр из Кино/Сериалы? )
kostya_76, а какие ошибки в билдере?
(12.02.2012 00:26)kostya_76 Wrote: [ -> ]В билдере получается форму создавать, в Делфи - хуки)
так сделай две библиотеки

и вызывай одну из другой
(12.02.2012 13:16)Berserker Wrote: [ -> ]kostya_76, а какие ошибки в билдере?
Вот такие:
Я вообще не понимаю, что означает после подстановки строка:
typedef __declspec(align(1)) struct TTxtFile
А именно - что такое (align(1))
gamecreator Wrote:так сделай две библиотеки Sm и вызывай одну из другой
Если бы знал как, то наверное и хук смог бы написать на С++ без использования SDK.
kostya_76, запрещает выравнивание полей в структуре по границе в 4 байта или более. Для билдера попробуй убрать мой макрос и обернуть эти структуры в:
Code:
#pragma pack(1)
...описание типа...
#pragma pack()