Current time: 14.04.2024, 13:16 Hello There, Guest! (LoginRegister)
Language: english | russian  

Post Reply 
Threaded Mode | Linear Mode
Исследование героев
» туториал(ы)
Author Message
kostya_76 Offline

Posts: 33
Post: #406

(12.02.2012 21:43)baratorch Wrote:  kostya_76
__stdcall void замени на void __stdcall

Да, теперь копмилится. правда кучу предупреждений выдает:
При загрузке длл вот такая штука выскакивает:
Хотя и работает впоследствии: обЪекты удаляются в игре.
12.02.2012 22:01
Find all posts by this user Quote this message in a reply
kostya_76 Offline

Posts: 33
Post: #407

А при попытке создания хука ошибки линковщика:
13.02.2012 00:39
Find all posts by this user Quote this message in a reply
Sav Offline

Posts: 2180
Post: #408

Мне для работы пришлось переименовать era.cpp в era.h.
13.02.2012 00:54
Find all posts by this user Quote this message in a reply
kostya_76 Offline

Posts: 33
Post: #409

(13.02.2012 00:54)Sav Wrote:  Мне для работы пришлось переименовать era.cpp в era.h.

От появления предупреждений при линковке это действительно избавило. Но не более того.

От ошибок линковщика, приведенных на последнем скрине удалось избавиться, убрав галочки "Use VCL" и "Multi Threaded" при создании шаблона библиотеки мастером.
Но хук не создается, и вообще секции этой длл в памяти не появляются.

В предыдущем примере с удалением объектов с помощью ЕРМ-инструкций также в памяти длл не видно, но тем не менее объекты удаляются.
13.02.2012 18:25
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16471
Post: #410

Я залью сегодня обновлённый вариант.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
13.02.2012 20:45
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16471
Post: #411

http://wikisend.com/download/364322/SDK.rar
Переписан заголовочный файл, обновлён пример, добавлена демонстрация установки перехватчика.

Code:
#include <windows.h>
#include "Era.h"
  
using namespace Era;
  
const int ADV_MAP   = 37;
const int CTRL_LMB  = 4;
const int LMB_PUSH  = 12;

void __stdcall OnAdventureMapLeftMouseClick (TEvent* Event)
{
  ExecErmCmd("CM:I?y1 F?y2 S?y3;");
  if ((y[1] == ADV_MAP) && (y[2] == CTRL_LMB) && (y[3] == LMB_PUSH))
  {
    ExecErmCmd("CM:R0 P?y1/?y2/?y3;");
    ExecErmCmd("UN:Ey1/y2/y3;");
    if (f[1])
    {
      ExecErmCmd("UN:Oy1/y2/y3/1;");
      ExecErmCmd("IF:L^{~red}Object was deleted!{~}^;");
    }
  }
}

BOOL __stdcall Hook_BattleMouseHint (THookContext* Context)
{
  ExecErmCmd("IF:L^{~gold}This is a battle hint!{~}^;");
  return EXEC_DEF_CODE;
}

extern "C" __declspec(dllexport) BOOL APIENTRY DllMain (HINSTANCE hInst, DWORD reason, LPVOID lpReserved)
{
  if (reason == DLL_PROCESS_ATTACH)
  {
    ConnectEra();
    RegisterHandler(OnAdventureMapLeftMouseClick, "OnAdventureMapLeftMouseClick");
    ApiHook((void*) Hook_BattleMouseHint, HOOKTYPE_BRIDGE, (void*) 0x74fd1e);
  }
  return TRUE;
};


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
13.02.2012 22:50
Find all posts by this user Quote this message in a reply
kostya_76 Offline

Posts: 33
Post: #412

Berserker, Все равно не получается )
В смысле, компилится нормально, только это предупреждение также осталось:
[C++ Warning] Era.h(130): W8058 Cannot create pre-compiled header: initialized data in header
При запуске то же сообщение:И в памяти, соответственно , длл не появляется.
Может я что-то не так делаю? Бросаю созданную длл в папку EraPlagins. Все остальные плагины работают.
14.02.2012 00:12
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16471
Post: #413

Плагин должен иметь расширение *.era. Ну а предупреждение компилятора нормальное.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
14.02.2012 01:38
Find all posts by this user Quote this message in a reply
kostya_76 Offline

Posts: 33
Post: #414

(14.02.2012 01:38)Berserker Wrote:  Плагин должен иметь расширение *.era. Ну а предупреждение компилятора нормальное.

На работоспособные длл изменение расширения на .era никак не влияет: работают и так и так.
А вот в данном примере смена расширения приводит к вылету после сообщения об исключении.
Если в DllMain оставить только вызов ConnectEra() , тогда нормально загружается.

Berserker, а ты пробовал сам скомпилировать и запустить этот пример? Работает?
(This post was last modified: 14.02.2012 16:29 by kostya_76.)
14.02.2012 16:03
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16471
Post: #415

kostya_76, да, причём как часы. 20 КБ размер выходит.

Quote:На работоспособные длл изменение расширения на .era никак не влияет: работают и так и так.
Не так. *.dll - это старые плагины, *.era - новые. Новые грузятся ДО вога и основаны на системе событий.

А вы вообще на какой версии эры экспериментируете? Я видел в пути WT.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
14.02.2012 17:02
Find all posts by this user Quote this message in a reply
kostya_76 Offline

Posts: 33
Post: #416

(14.02.2012 17:02)Berserker Wrote:  kostya_76, да, причём как часы. 20 КБ размер выходит.

Это, я так понимаю, в GNU компилилось , а не в билдере? У меня весит 9 КБ.

(14.02.2012 17:02)Berserker Wrote:  Не так. *.dll - это старые плагины, *.era - новые. Новые грузятся ДО вога и основаны на системе событий.
В данном примере это принципиально? Пример на Делфи прекрасно работает без переименований.

(14.02.2012 17:02)Berserker Wrote:  А вы вообще на какой версии эры экспериментируете? Я видел в пути WT.
Era 1.9, экзешник насколько помню потом еще отдельно скачивал.
А установлено в папку с WT.
14.02.2012 17:20
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16471
Post: #417

Я не знаю, что там чудим билдер, но суть проста. Era.dll загружается, получаются адреса её функций и вызываются. Если мне предоставится возможность проверить на билдере, я попробую. Дома его нет.


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
14.02.2012 17:52
Find all posts by this user Quote this message in a reply
kostya_76 Offline

Posts: 33
Post: #418

(14.02.2012 17:52)Berserker Wrote:  Я не знаю, что там чудим билдер, но суть проста. Era.dll загружается, получаются адреса её функций и вызываются. Если мне предоставится возможность проверить на билдере, я попробую. Дома его нет.

Для меня это не так уж просто) Попробую еще поковыряться в опциях. Можно еще мап-файл поизучать)
(This post was last modified: 14.02.2012 18:21 by kostya_76.)
14.02.2012 18:20
Find all posts by this user Quote this message in a reply
kostya_76 Offline

Posts: 33
Post: #419

Berserker, Если поменять hEra = (HINSTANCE) v[1]; на hEra = LoadLibrary("era.dll");,
то все работает, кроме функции ApiHook - Вероятно ее нет в библиотеке)
А Функция Hook работает, ну и остальные вроде тоже.

Адрес hEra указывал куда-то в середину секции, и в результата все GetProcAddress возвращали нули.
16.02.2012 02:56
Find all posts by this user Quote this message in a reply
Berserker Offline
Administrators

Posts: 16471
Post: #420

ApiHook в Эре 2)


Скачать Герои 3 Эра и всё, что с ней связано / ERA 2.46f для старых модов
Поддержать проект
16.02.2012 12:11
Find all posts by this user Quote this message in a reply
« Next Oldest | Next Newest »
Post Reply 


Forum Jump:

Powered by MyBB Copyright © 2002-2024 MyBB Group