Это хороший вопрос. Существует одно принципиальное различие между .NET DLL и обычными DLL, для этого ответа давайте использовать терминологические нативные DLL в качестве обычных DLL, которые не зависят от .NET framework.
Принципиальным отличием является то, что в макете заголовка .NET PE имеется пятнадцатая запись каталога данных, в нативной DLL имеется только 14 записей каталога данных. Таким образом, вы можете определить разницу между ними, для нативной DLL, эта запись будет нулевой! И не только это: в .NET DLL будут встроены метаданные, необходимые для соответствующей обработки Framework, такие как атрибуты, запрашивающие разрешения безопасности и т. Д. То же самое относится и к .NET EXE.
В отношении различных расширений, маскирующихся под DLL, таких как OCX и CPL, экранные заставки являются еще одним примером расширения без DLL в смысле слова с точки зрения .EXE, т.е. те, которые являются .SCR, на самом деле .EXE's ... как бы странно это ни звучало, кажется, что Microsoft сделала некоторые приложения для использования определенного расширения для EXE и DLL, я считаю, что это было удержанием со времен Windows 3.1, CPL для панели управления, OLE, известная как связывание объектов и встраивание в OCX, теперь ActiveX, SCR для экранных заставок, также .EXE. Меня не удивит, если то же самое относится и к .MSCc (расширения служб, используемые в консольх Microsoft Snap In)
Регистрация DLL - это то, где regsvr32
регистрирует DLL и ее идентификаторы классов, которые будут найдены в реестре под ключом HKEY_CLASSES_ROOT, это, скорее всего, будет для COM (объектная модель компонентов) для того, чтобы сделать объекты COM глобально видимыми для всех языки независимо от языка / среды разработки. ActiveX DLL также подходят к той же категории, некоторые, как известно, автоматически регистрируют себя (включая COM DLL), включая идентификацию библиотеки типов (идентификаторы typelib) ...
У многих программ, выпущенных до Windows 95, раньше были свои собственные библиотеки DLL, некоторые из них дублировались. Самым распространенным, что я помню, был CTL3D.DLL (Помните? Это придаст элементам управления Windows трехмерный вид - чудак!). Повсюду дублировалось столько версий, что такое дублирование и различия версий должны были привести к появлению Windows 95, известной как адский DLL. Именно там, когда реестр был впервые представлен при запуске, он был разработан для того, чтобы обойти ад DLL, регистрируя все библиотеки типов в одном месте, вместо того, чтобы дублировать библиотеки DLL повсеместно, но он не разрешал версии в то время это приводило к тому, что программы выглядели неработающими, поскольку в DLL использовался идентификатор класса, который был заменен более новой версией DLL, что приводило к сбою программ!