DLL - это общая библиотека. Это объект уровня ОС - любой процесс может загрузить DLL и вызвать определенные в ней функции.
Элемент управления ActiveX - это COM-объект, который реализует определенные интерфейсы, позволяющие хостам вызывать его методы и встраивать их в свой пользовательский интерфейс. Существуют определенные минимальные требования к интерфейсам, которые должен реализовывать элемент управления ActiveX для успешной установки в пользовательский интерфейс приложения. Поскольку COM-объекты обычно динамически загружаются процессом, они реализуются как DLL. Одна DLL может реализовывать один класс COM или более.
Относительно исключений - я не уверен, какие различия вы наблюдали, но функция ничем не отличается от функции, реализованной в главном .EXE-файле вашего процесса. Выданное исключение должно нормально распространяться в соответствии с правилами, определенными средой исполнения вашего языка программирования.
Метод ActiveX отличается. Как правило, он вызывается через то, что называется интерфейсом IDispatch. Вместо того, чтобы быть простым вызовом подпрограммы, он вызывается путем вызова метода в интерфейсе IDispatch (IDispatch :: Invoke), его аргументы маршалируются определенным образом (по сути, они преобразуются в стандартные типы и упаковываются таким образом, что скрываются различия в соглашениях о вызовах и типах данных между языком реализации основного процесса и языком элемента управления ActiveX.) Затем интерфейс IDispatch :: Invoke определяет, к какому методу в ActiveX пытается обратиться вызывающий объект, и направляет его напрямую.
Исключения, как правило, не распространяются через интерфейс IDispatch. Как ваша среда выполнения взаимодействует с кодами ошибок, возвращаемыми IDispatch :: Invoke, до разработчика, чтобы решить. Таким образом, вы можете разумно ожидать, что ваши ожидания не оправдаются при работе с ошибками и исключениями во время выполнения, выдаваемыми элементом управления ActiveX.