I'd suggest having your own sqlite3.dll in your own application's working
folder, rather than relying on an existing version somewhere on the PC already
which could be any version!
If you created your own DLL, why would you then want to statically link to it
(defeating a lot of the point of a *dynamic* load library)? That doesn't
provide you with any back/forwards compatibility. Why not dynamically load the
sqlite3.dll and the required functions at runtime instead? If the functions
can't be found on the load, you would then be able to handle it gracefully and
inform the user, rather than having the prompt of a procedure entry point
error, which means nothing to non-programmer users.
>From a C program, this is the kind of thing I'd do (example just loads the
>function sqlite3_libversion_number from sqlite3.dll - note that I've
>hand-coded this so it hasn't been checked for typos!):
//...
// include necessary windows headers for LoadLibrary() API etc.
#include <sqlite3.h> // for sqlite-specific typedefs/structures/etc
//...
typedef int (SQLITE_API * MYPROC)(void); // a typedef'd version of the
function definition of sqlite3_libversion_number() prototype from sqlite3.h
static HANDLE HLib = NULL; // handle to sqlite3 library,
once opened
static MYPROC MySqlite3LibVersion = NULL;// will contain a pointer to our
imported sqlite3_libversion_number() function
BOOL LoadSqliteLibrary()
{
BOOL Ret = TRUE;
if (HLib != NULL)
{
// dynamically load sqlite3.dll
HLib = LoadLibrary( "sqlite3.dll" );
// if library loaded okay, get the required procedures' address
pointers out
if (HLib != NULL)
{
// get pointer to sqlite3_libversion_number from the
dll for our own use
MySqlite3LibVersion = GetProcAddress( HLib,
"sqlite3_libversion_number" );
// if we couldn't find the required procedure's entry
point...
If (MySqlite3Exec == NULL)
{
// procedure entry point may not exist in
loaded library!
Ret = FALSE;
// free library on procedure load error, as not
much use any more
FreeLibrary( HLib );
HLib = NULL;
// ... possibly inform user of the error at
this point?
}
}
else
{
// library failed to load - sqlite3.dll file may not
exist
Ret = FALSE;
// ... possibly inform user of the error at this point?
}
}
// else library is already loaded
return (Ret);
}
//...
// As long as LoadSqliteLibrary() returns TRUE, you can now use
MySqlite3LibVersion() to return the library version number.
//...
Thanks,
Nick.
-----Original Message-----
From: [email protected] [mailto:[email protected]]
On Behalf Of Teg
Sent: 24 December 2009 00:57
To: General Discussion of SQLite Database
Subject: Re: [sqlite] sqlite3_prepare_v2
I statically link for exactly this reason. If I WAS going to dynamic
link though, I'd make my own DLL from the sources, give it a unique
name, link against it's import lib and keep it in the same folder as
my EXE.
C
Wednesday, December 23, 2009, 4:50:08 PM, you wrote:
DRH> On Dec 23, 2009, at 4:12 PM, Dr. Robert N. Cleaves wrote:
>> Dear Sir:
>>
>> On startup, I get a message that the procedure entry point
>> sqlite3_prepare_v2 is missing from the dynamic link library
>> SQLite3.dll. How can I download the missing item?
>>
>> Thank youÂ…
DRH> I'm guessing you are running windows. Probably you have two or more
DRH> applications installed that use SQLite. (Candidates applications
DRH> include Skype, Google Gears, Firefox, McAfee Antivirus, Adobe
DRH> Acroread, Adobe Photoshop, iTunes, DropBox, and many others.)
DRH> Probably when one of these applications was installing itself, it
DRH> overwrote the system SQLite3.dll with an older version that does not
DRH> support the sqlite3_prepare_v2() interface. Then when one of the
DRH> other applications that needs the new interface tries to run, it gets
DRH> the older DLL that lacks the necessary entry point.
DRH> I beg and plead with application vendors to statically link against
DRH> SQLite to avoid this kind of problem, but nobody listens to me about
DRH> that....
DRH> I don't use windows myself and so I won't be much help in
DRH> troubleshooting this. But I have forwarded this reply to the SQLite
DRH> mailing list where there are lots of windows users. Perhaps someone
DRH> there can explain what needs to be done....
>>
>> Dr. Robert N. Cleaves
>> President
>> Wilderness Conservancy
>> and Project CARE
>> www.wildcon.org
>> [email protected]
>> (310) 472-2593
>>
>> I am using the Free version of SPAMfighter.
>> We are a community of 6 million users fighting spam.
>> SPAMfighter has removed 37 of my spam emails to date.
>> The Professional version does not have this message.
DRH> D. Richard Hipp
DRH> [email protected]
DRH> _______________________________________________
DRH> sqlite-users mailing list
DRH> [email protected]
DRH> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
--
Best regards,
Teg mailto:[email protected]
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users