2014-08-28 1 views
1

Я думаю об использовании IsBadCodePtr, чтобы отличить predefined resource type от имени пользовательского типа ресурса.Полезно ли использовать IsBadCodePtr для выделения данного типа ресурса?

Это хорошая практика (или даже лучший способ?) Использовать API IsBadCodePtr, чтобы узнать, относится ли данный тип ресурса к одному из предопределенных типов ресурсов или есть лучшая альтернатива?

Обратите внимание, что я говорю об именах типов ресурсов, а не о идентификаторах.

+2

Примечание от документов: * Важная Эта функция устарела и не должна использоваться. Несмотря на свое название, он не гарантирует правильность указателя или то, что указанная память безопасна в использовании. Для получения дополнительной информации см. Примечания на этой странице. * - это должно быть достаточно хорошей причиной, чтобы не использовать ее. –

+0

Ну, это может быть для общих целей, но он ничего не говорит о ресурсах, и, похоже, это хорошая идея. Вот почему я спрашиваю, что может пойти не так. Я читал документы. –

+0

@Benjamin: Ресурсы - это данные, а не код. Я не знаю, как вы могли бы сказать, что неплохо использовать функцию, предназначенную для указателей функций, для проверки указателей данных. –

ответ

5

Это не очень хорошая практика. Вместо этого вы должны использовать макрос IS_INTRESOURCE, в котором указывается, был ли указатель ресурса создан с MAKEINTRESOURCE (что означает, что он не является реальным указателем). Обратите внимание, что это не означает, что это «предопределено», потому что вы можете позвонить MAKEINTRESOURCE на свои собственные идентификаторы ресурсов.

Функции IsBad____Ptr не должны использоваться вообще. Как указано в документации:

Эта функция устарела и не должна использоваться.

В этом сообщении в блоге Microsoft Raymond Chen содержится дополнительная информация: IsBadXxxPtr should really be called CrashProgramRandomly.

+0

Спасибо. Я буду использовать макрос. Я даже не об этом! –

Смежные вопросы