Верхний регистр может обеспечить усиление в видимости ключевого слова, но можно компенсировать с выделением кода и добавлением отступа.
Мы используем нижний регистр, потому что редактор запросов и другие инструменты делают чудеса в редактировании t-кода-SQL, и мы не видим потребности подвергнуть пыткам мизинец.
Обычно плохие вещи происходят при взаимодействии с объектами вне вашего процесса. Например, у вас есть некоторая общая память, используемая несколькими процессами, в которые ваш процесс будет писать, а другие процессы читают и / или записывают. Обычно для синхронизации чтения и записи используется мьютекс. Если поток в вашем процессе получил мьютекс и находится в процессе внесения изменений при вызове TerminatePorcess, мьютекс будет отменен, и общая память потенциально останется в несогласованном состоянии.
Я подозреваю, что вы пропустили использование одного из сторонние библиотеки. DllMain несколько ограничивает, поэтому в библиотеке могут быть функции инициализации и деинициализации, которые вы должны вызывать.
На основе документации для этого и ExtiProcess кажется, что основная проблема заключается в том, что DLL выгружаются без вызова DllMain с флагом DLL_PROCESS_DETACH.
Мои 2cents: В документации есть паранойя, что вы нарушите некоторую критическую операцию, выполняемую в DllMain + DLL_PROCESS_DETACH. Любой, кто зависит от этого для поддержания критического состояния, уже находится во власти диспетчера задач, поэтому я не вижу большого риска в использовании этого API.
AFAIK, если вы не делаете ничего «необычного» (что включает, но не ограничивается: создание потоков, блокировки , Подключения к БД, с использованием COM-объектов) ничего страшного не произойдет. Но, как Эрвикер говорит , вы не знаете , что делает DLL в масштабе ОС, и вы, конечно, не знаете, изменится ли это в будущем, поэтому полагайтесь на это очень хрупко.
Вам не любопытно узнать, почему происходит это нарушение доступа? Это вполне может быть признаком того, что было испорчено намного раньше.
Это зависит от того, как вы интерпретируете «глобальные данные». Если вы понимаете, что это означает (как я обычно это делал) данные, хранящиеся в адресном пространстве процесса, тогда совет не имеет смысла - мы знаем, что память исчезнет, так кого волнует, что с этим произойдет?
иметь в виду то, что может делать DLL в масштабе ОС, и которое сохраняется вне времени существования любого процесса. Простым примером может быть временный файл, который, возможно, необходимо очистить; слишком много раз сбой процесса, и вам не хватит места на диске, поэтому, вероятно, лучше не делать этого привычкой.