У меня есть тестовый проект C ++ с кучей функций-заглушек, которые имеют ту же реализацию. Эти заглушки предназначены для «замены» во время выполнения с использованием Windows Detours. Проблема в том, что в режиме выпуска компилятор заставляет все эти заглушки указывать на одну и ту же реализацию. Чтобы проиллюстрировать это, рассмотрим этот код:
#include <iostream>
using namespace std;
void A() { cout << "stub" << endl; }
void B() { cout << "stub" << endl; }
void main()
{
cout << &A << ", " << &B << endl;
}
В режиме отладки значения указателя будут другими. В режиме релиза они одинаковые.
Я попробовал директиву pragma optimize (я использую компилятор Microsoft), но она не устранила проблему. В результате мой хук Windows Detours перехватывает все вызовы идентичных заглушек.
Как я могу это исправить?
Благодарю.
Попробуйте использовать макросы препроцессора, чтобы сделать функции-заглушки уникальными, чтобы оптимизатор не объединил их в один.
Использование __FILE__, __LINE__ и __FUNCTION__ в C ++
Что-то вроде этого:
void A() { cout << __FUNCTION__ << endl; }
void B() { cout << __FUNCTION__ << endl; }
Других решений пока нет …