Re: Is it possible to do Static linking but optionalyl load dependent dlls
Appart from /delayload option (that only waits until dll is needed to load
automatically into process space), you can load/unload any DLL manually vial
LoadLibrary/GetProcAddess.
A sample from one of my projects:
//DLL functions container
HRESULT (FAR STDAPICALLTYPE * Weri_Open) (void);
HRESULT (FAR STDAPICALLTYPE * Weri_Set) (void **pTransaction, char
*szAttrib, int szValue);
HRESULT (FAR STDAPICALLTYPE * Weri_PerformTransaction) ();
HRESULT (FAR STDAPICALLTYPE * Weri_Get) (void *pTransaction, char
*szAttrib, int szValue);
HRESULT (FAR STDAPICALLTYPE * Weri_BeginTransaction) ();
HRESULT (FAR STDAPICALLTYPE * Weri_EndTransaction) ();
HRESULT (FAR STDAPICALLTYPE * Weri_Close) (void);
WeriNative::WeriNative(int serial,bool bInTest)
{
m_bWeriOk=true;
sprintf_s(m_sSerial,5,"%04d",serial);
m_hLib=LoadLibrary(L"C:\\Windows\\System32\\WERAASINC.DLL");
if(m_hLib==NULL)
{
::MessageBox(HWND_DESKTOP,L"bla bla",L"BLABLA",MB_ICONERROR);
m_bWeriOk=false;
return;
}
(FARPROC&)Weri_Open = GetProcAddress(m_hLib, "Weri_Open");
(FARPROC&)Weri_Close = GetProcAddress(m_hLib, "Weri_Close");
(FARPROC&)Weri_Set = GetProcAddress(m_hLib, "Weri_Set");
(FARPROC&)Weri_PerformTransaction = GetProcAddress(m_hLib,
"Weri_PerformTransaction");
(FARPROC&)Weri_Get = GetProcAddress(m_hLib, "Weri_Get");
(FARPROC&)Weri_BeginTransaction = GetProcAddress(m_hLib,
"Weri_BeginTransaction");
(FARPROC&)Weri_EndTransaction = GetProcAddress(m_hLib,
"Weri_EndTransaction");
WeriOpen();
"Ganga Sridhar" <gangasridhar@abosoftware.com> wrote in message
news:Oaimlni1IHA.2068@TK2MSFTNGP05.phx.gbl...
Thanks that is exactly the kind of setting I was looking for.
Can you please let me know how can the Delayed loading be implemented.
Also are there any know problems or impacts that I need to be cautious
about when the /DELAYLOAD switch is specified?
Thanks and Regards
Ganga
/DELAYLOAD linker switch
"Scott McPhillips [MVP]" <org-dot-mvps-at-scottmcp> wrote in message
news:OHsMrji1IHA.5832@TK2MSFTNGP02.phx.gbl...
"Ganga Sridhar" <gangasridhar@abosoftware.com> wrote in message
news:Oe90zbi1IHA.4492@TK2MSFTNGP02.phx.gbl...
I am adding this in the Project|Properties|Linker|Input setting of my
application imqb23vn.lib imqc23vn.lib
this I believe statically links them with my application.
Thanks and Regards
Ganga
It statically links only the tiny little lib files, which makes the
linker think the functions are present. This import lib does nothing
more than load the DLL at run time, so the DLLs are still required at run
time. So it's not really static linking.
To run without requiring the DLLs you have two possible approaches:
LoadLibrary/GetProcAddress, or the /DELAYLOAD linker switch. With
/DELAYLOAD the DLL is not required until or unless you call one of its
functions.
--
Scott McPhillips [VC++ MVP]
--
Microsoft Visual C++ MVP
========================
Mi blog sobre programaci?n: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas m?as: http://rfog.blogsome.com/
Libros, ciencia ficci?n y programaci?n
========================================
El mejor modo de inspirar nuevas ideas, es haber cerrado el sobre con lacre.
-- Ley de la carta.