a) bass_aac.dll is missing as dynamic loading version.
there was no reason for a dynamic version because it is a Plug-in. so you can use BASS_PluginLoad(...)
to load it
but if you really need it. I can add it
Whats the advantage of using the dynamic version instead the static one
Let's now compare static and dynamic DLL loading to see what are advantages and disadvantages of both.Static loading PROS:
More easy for a beginner developer, no "ugly" API calls.
DLLs loaded once, when the program starts.
Static loading CONS:
The application will NOT start if any DLLs are missing (cannot be found). When you run the program you will see an ugly message: "This application has failed to start because 'missing.dll' was not found. Re-installingn the application may fix this problem".
By design the DLL search order with static linking includes: the directory from which the application loaded, the system directory, the Windows directory, directories listed in the PATH environment variable.
Note also that the search order might be different for various Windows versions.
The safest is to always expect to have all the DLLs in the directory where the calling application is.
More memory used, as all DLLs are loaded even if you will not use some of the functions.Dynamic loading PROS:
You can run your program even when some of the libraries it uses are not present.
Smaller memory consumption - DLLs used when needed.
You can specify the full path to the DLL.
Use for functionality that is rarely needed by the application.
Could be used for modular applications. The application only exposes (loads) modules (dlls) "approved" for the user.
The ability to load and unload library dynamically, is the foundation of a plug-in system that allow a developer to add extra functionality to programs.
Backwards compatibility with older Windows versions, in which system dlls may not support the same functions or in the same way. Detecting the Windows version first, then dynamic linking based on what your app is running on, allows you to support more versions of Windows and provide work arounds for older OSs, or at the very least gracefully disabling features you can't support.
Dynamic loading CONS:
Requires more code, not trivial for a beginner developer.
I hope differences are clear and that you will know what type of DLL loading to use for your next project
If you think some PROS or CONS are missing, feel free to let me know - I'll add it to the list.
Which codelines have to be added to load dynamically and where (example of usage)
In each unit there are two functions one for loading and the other for unloading
in Delphi you can use as following
(* bass plugin's *)
BASS_DLL = 1;
BASS_WASAPI_DLL = 2;
BASS_ASIO_DLL = 3;
Bass_dll_Loaded : Array [1..3] of Boolean;
Procedure Bass_Load(Path : Widestring):
Bass_dll_Loaded[BASS_DLL]:= Load_BASSDLL(Path + 'bass.dll');
if Bass_dll_Loaded[BASS_DLL] then
If (HiWord(BASS_GetVersion()) <> BASSVERSION) then
Bass_dll_Loaded[BASS_WASAPI_DLL]:= Load_WASAPIDLL(Path + 'basswasapi.dll');
Bass_dll_Loaded[BASS_ASIO_DLL]:= Load_ASIODLL(Path + 'bassasio.dll');
// init bass
(* free all WASAPI Input Device's *)
(* free all ASIO Input Device's *)
(* free all plugins. *)
(* UnLoad Plugin's Dynamic *)
Unload_WASAPIDLL(); Bass_dll_Loaded[BASS_WASAPI_DLL]:= false;
Unload_ASIODLL(); Bass_dll_Loaded[BASS_ASIO_DLL]:= false;
Unload_BASSDLL(); Bass_dll_Loaded[BASS_DLL]:= false;
if not Load_WASAPIDLL(Path + 'basswasapi.dll') the
// Failed to load the basswasapi DLL