Можно проверить на лицензию в DllMain () и умереть, если это не найдено.
Проверьте окно стека вызовов (отладка, Windows, стек вызовов). Двойной щелчок по каждой записи приведет вас к оператору вызова. Вы также можете щелкнуть его правой кнопкой мыши, чтобы включить / отключить отображение элементов внешнего кода и вызовов из других потоков.
Если вы не видите ничего в стеке вызовов в установленной пользователем точке останова , это обычно означает, что он был вызван из собственного кода.
Другой случай, когда он не может получить стек: вы нажимаете Debug> Break All, и основной поток находится в состоянии ожидания / сна, отладчик может иметь проблемы при построении стека вызовов. Я считаю, что отладчик использует основной поток для своей неявной оценки функции.
Попробуйте подключить (или запустить) отладчик смешанного (собственного и управляемого) кода и посмотрите, исправит ли это ситуацию.
Если точка останова находится в функции, вызываемой событием, у вас может не быть прямого стека вызовов вызывающей стороне, и вам нужно будет разрешить просмотр всего кода, а не только «только мой код».
При достижении точки останова вы можете просмотреть весь стек вызовов. Вы можете открыть это окно, перейдя в меню «Отладка» -> «Окна» -> «Стек вызовов».
Вы также можете вызвать его с помощью сочетания клавиш Alt + Ctrl + C
РЕДАКТИРОВАТЬ: Вы также можете щелкнуть правой кнопкой мыши имя функции и просмотреть «График вызывающих абонентов», который покажет вам всех вызывающих абонентов для вашего метода. Кроме того, вы можете открыть Браузер вызовов (выбрав «Просмотр» -> «Другие окна» -> «Браузер вызовов») и выполнить поиск по имени вашего метода.
Если вы ничего не видите в окне стека вызовов, то определенно что-то не так. Я бы предложил знаменитую последовательность R-действий: