Как перехватить все вызовы AfxThrowMemoryException - PullRequest
0 голосов
/ 17 октября 2019

У меня большая программа MFC. У нас есть редкие ситуации, когда клиент получает CMemoryException.

Проблема в том, что мы получаем исключение, а не местоположение, в котором было сгенерировано исключение.

Я могу перехватить IAT (Импорт таблицы адресов), но в этой ситуации я могу только обнаружить вызовы, сделанные из моего приложения в MFC DLL или из других DLL в MFC DLL.

Как перехватить все вызовы AfxThrowMemoryException? Поэтому все вызовы из MFC DLL также могут быть перехвачены мной.

На самом деле я не знаю внутреннего адреса функции, которую хочу перехватить. Хорошо, я могу использовать IAT и вычислить внутренний адрес.

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

Или есть какой-то более простой способрэп операция throw внутри кода C ++?

Лучше всего было бы, чтобы я мог перехватить любое исключение до того, как оно будет сгенерировано. Так что я вижу код звонящего.

1 Ответ

0 голосов
/ 21 октября 2019

Я заменил сам заголовок функции. Для отладочной версии было дополнительное перенаправление. Следующий код работает.

Просто реализуйте свою собственную функцию исключения MyAfxThrow .... Должна иметь ту же подпись, что и функции AfxThrow ...

1004 *
...