C # Крюк в другой метод DLL? - PullRequest
1 голос
/ 07 апреля 2011

Можно ли "присоединиться" к другому методу C # dll (нет источника для этой dll)?Я имею в виду, что если на компьютере есть другая программа, использующая эту dll, и она вызывает указанный метод, я получу событие в моей программе.

У меня проблемы с добавлением функциональности вСуществующее приложение, написанное на C #, к которому у меня нет исходного кода.Мне нужна дополнительная форма, которая появится при вызове определенного метода в программе.

Программа подключается к базе данных MS SQL на другом компьютере.Я также думал о создании триггера SQL на сервере, который каким-то образом соединялся бы с компьютером и посылал какой-то сигнал для запуска дополнительной формы, но это с треском провалилось.

[Править] В качестве альтернативы я мог бы прослушатьмашина для трафика SQL, и если я найду вызов для процедуры SQL, которая сопровождает этот метод DLL, моя программа будет действовать?Но не повлияет ли это на производительность?

Ответы [ 3 ]

1 голос
/ 07 апреля 2011

Термин для действия, которое вы хотите сделать, это Dll Injection . Вот учебник о том, как заставить ваш код .net работать во внедренной dll. Если вы хотите получить представление о внедрении DLL, у того же человека есть очень хороший учебник для начинающих, который называется « Как мне создать работающего покерного бота ». Это очень тщательно и очень просто понять.

1 голос
/ 07 апреля 2011

Это плохо документировано, и я сам все еще пытаюсь выяснить, как все это действительно работает, но вот решение c # для подключения к DLL: EasyHook

0 голосов
/ 07 апреля 2011

Правдоподобно, если в dll "other" были выполнены определенные условия.

  1. Если в dll "other" есть механизм для получения ссылки на экземпляр объекта, созданного вотдельный домен приложения.
  2. Если интересующее вас событие имеет доступ "public".

Затем вы можете создать делегата и назначить его для выбранного вами метода.

Это будет выглядеть примерно так:

var other = OtherDLL.getInstance(InstanceID);
other.DidSomething += new EventHandler(myDelegate);
// the += is important so that you are adding your delegate to the existing calls for that method..

//Where you have:
protected myDelegate(Object sender, EventArgs e)
{
// do what you want...
}

Если общедоступные хуки не доступны, то вы не можете это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...