In most fundamental terms, a DLL does not have it's own execution context. You cannot "run" a DLL. In order to run code in a DLL it must be loaded by an exe. DLLs are often created to allow reuse of general code, although this is not a requirement. A developer may create DLLs that are only intended for use by a single application, because a DLL allows more modular organization of code, and a DLL may be upgraded without having to redistribute a new version of an application. DLLs are not typically form oriented. An occasional DLL may display a dialog, but most DLLs contain primarily classes with few or no forms. For example, the NET framework is primarily composed of DLLs. In general, a well designed application that is any larger than "small" in terms of size and complexity will consist of an EXE that provides the forms and user interface, but all business logic and real guts of the application will be organized into a logical class structure provided by DLLs.