При написании статьи никто и не претендовал на диссертацию! Это просто отправная точка одного из подходов (о чем и сказано в начале), и зачастую именно простейших примеров и не хватает людям, которые только начали разбираться
В данном примере явно нигде. Но это всего лишь пример, а не рабочее приложение. При освобождении ссылку на управляемый объект также освобождаем:
CppService::~CppService()
{
GCHandle handle = GCHandle::FromIntPtr(IntPtr(m_impl));
handle.Free();
}
Microsoft Detours немного отдельная тема. Я хотел показать сам процесс, Detours по сути это все скрывает. Более того коммерческая версия (и работа с архитектурой x64) стоят 10K $, поэтому интерес к этой библиотеке у меня поугас :)
Да, именно цель статьи и была показать что установка хука не такое уж сложное дело, попытаться дать направление куда мыслить тем кто только начал интересоваться указанной темой.
Про многопоточность вы абсолютно правы. Указанный пример не рассчитан на нее. Вообще умение установить описанный вами хук достаточно нетривиальное.
К сожалению, указанным в статье способом доступ к такой функции получить нельзя. Можно дизассемблировать dll, понять где находится код нужной вам функции и заменить его своим.
CppService::~CppService()
{
GCHandle handle = GCHandle::FromIntPtr(IntPtr(m_impl));
handle.Free();
}
Про многопоточность вы абсолютно правы. Указанный пример не рассчитан на нее. Вообще умение установить описанный вами хук достаточно нетривиальное.