DLL new / delete переопределяет пользовательский код new / delete? - PullRequest
6 голосов
/ 27 апреля 2011

ребята, Если я переопределю глобальный новый и удалить в моем коде DLL, будет ли это переопределять код пользователя новый и удалить? Я сделал тест, и он показывает, что пользователь новый и удалить не будут затронуты. Если я хочу сделать новый пользовательский код и заменить его на мой новый SDK / удалить, как это сделать.

Что такое шаблон класса. Определение класса шаблона включает в себя некоторые новые / удалить. И пользовательский код может его создать. Тогда он может использовать пользователя new / delete, верно?

Ответы [ 4 ]

6 голосов
/ 27 апреля 2011

Нет, в Windows каждая DLL имеет свой собственный operator new() / operator delete(). Однако вы должны быть осторожны - если какая-то DLL new s является объектом, этот объект должен delete d использовать тот же operator delete() - в противном случае вы столкнетесь с неопределенным поведением.

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

Один из способов сделать это - заставить вашу DLL применять хуки API к EXE при загрузке DLL. Затем всякий раз, когда EXE вызывает одну из функций выделения памяти (например, HeapAlloc), он передается в ваш код. Существует несколько API-интерфейсов для выделения памяти, поэтому получите их все или просто получите то, что используют операторы new / delete (скорее всего HeapAlloc / HeapFree).

Может быть, не ортодоксально, но если вы хотите делать то, что говорите ... это путь. Если у вас есть доступ к исходному коду как EXE-файла, так и DLL, вероятно, есть более подходящие решения.

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

Если я хочу сделать новый код пользователя и заменить его на мой sdk new / delete, как это сделать.

Перегрузите операторы new и delete вGlobal Scope или класс видимости (of the user code), в соответствии с вашими потребностями.

Просто перегрузка new и delete в вашей собственной dll не будет перегружать версии кода пользователя.Они должны быть специально перегружены в своей области видимости.

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

Не будет, если ваши новые / удаленные функции не объявлены в коде пользователя.

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