Forms of DLLs
Whenever you load a DLL in a credit card applicatoin, two types of connecting allow you to call the exported DLL functions. The 2 methods of connecting are load-time powerful linking and run-time linking that is dynamic.
Load-time powerful linking
In load-time dynamic linking, a credit card applicatoin makes explicit telephone calls to exported DLL functions like regional functions. To use load-time dynamic linking, supply a header (.h) file and an import collection (.lib) file when you compile and link the applying. Once you try this, the linker will offer the operational system aided by the information that’s needed is to load the DLL and resolve the exported DLL function places at load time.
Run-time powerful linking
In run-time dynamic linking, a credit card applicatoin calls either the LoadLibrary function or even the LoadLibraryEx function to load the DLL at run time. Following the DLL is effectively packed, you utilize the GetProcAddress function to get the target of this exported DLL function you want to phone. By using run-time dynamic linking, there is no need an import collection file.
The ensuing list defines the application form requirements for when to use load-time dynamic linking as soon as to make use of run-time linking that is dynamic
In the event that initial startup performance of this application is very important, you need to use run-time linking that is dynamic.
In load-time dynamic linking, the exported DLL functions are just like regional functions. This will make it simple for you to definitely phone these functions.
An application can branch to load different modules as required in run-time dynamic linking. This is really important once you develop multiple-language variations.
The DLL entry way
Once you develop a DLL, you can easily optionally specify an access point function. The entry way function is named whenever procedures or threads connect on their own towards the DLL or detached on their own through the DLL. The entry can be used by you point function to initialize information structures or to destroy information structures as needed by the DLL. Also, in the event that application is multithreaded, you should use thread regional storage space (TLS) to allocate memory this is certainly private every single thread when you look at the entry way function. The code that is following a typical example of the DLL entry way function.
If the entry way function comes back a FALSE value, the applying will maybe not begin if you use load-time dynamic linking. If you work with run-time dynamic linking, just the specific DLL will not load.
The entry way function should just perform initialization that is simple and really should perhaps perhaps not phone some other DLL loading or termination functions. For instance, when you look at the entry way function, you must not straight or indirectly phone the function that is loadLibrary the LoadLibraryEx function. Also, you must not phone the function that is freeLibrary the procedure is terminating.
In multithreaded applications, ensure that usage of the DLL international information is synchronized (thread safe) in order to prevent possible data corruption. For this, usage TLS to produce unique data for each thread.
Export DLL functions
To export DLL functions, you may either put in a function keyword towards the exported DLL functions or produce a module definition (.def) file that lists the exported DLL functions.
To make use of a function keyword, you need to declare each function you want to export with all the keyword that is following declspec (dllexport)
To utilize exported DLL functions within the application, you have to declare each function that you would like to import utilizing the after keyword: declspec (dllimport)
Typically, you’ll make use of one header file that has a define statement and an ifdef declaration to split up the export declaration additionally the import declaration.
It is possible to make use of a definition that is module to declare exported DLL functions. You do not have to add the function keyword to the exported DLL functions when you use a module definition file. Into the module definition file, you declare the LIBRARY declaration while the EXPORTS declaration when it comes to DLL. The code that is following a typical example of a meaning file.