我在www.sqlite.org 下载了sqlite3.dll.利用动态加载的方法使用。
在C-Free下用C或者C++都能够调用成功,但VC++6.0中总是调用不成功。两种编译器使用的源代码都是一样,不知道是什么原因。VC++6.0下代码如下:编译链接都可以通过,但实际调试运行时会出现下面错误提示:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\Documents and Settings\natasha\My Documents\VC++6.0\Sqlite3\Debug\sqlite3.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
First-chance exception in Sqlite3.exe (SQLITE3.DLL): 0xC0000005: Access Violation.
The program 'C:\DOCUMENTS AND SETTINGS\NATASHA\MY DOCUMENTS\VC++6.0\Sqlite3\Debug\Sqlite3.exe' has exited with code 0 (0x0).
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
The program 'C:\DOCUMENTS AND SETTINGS\NATASHA\MY DOCUMENTS\VC++6.0\Sqlite3\Debug\Sqlite3.exe' has exited with code 0 (0x0).
可以生成sqlite3的DB文件,但程序会出错。头文件:
#ifndef _SQLITE3_H_
#define _SQLITE3_H_ 
#ifdef __cplusplus
extern "C" {
#endif 
//
typedef struct sqlite3{} sqlite3;
typedef int (* SQLITE3_OPEN)(const char*, sqlite3**);
typedef int (* SQLITE3_CLOSE)(sqlite3*);
//
#ifdef __cplusplus
}
#endif 
#endif /* _SQLITE3_H_ */源文件
#include "stdafx.h"
#include <windows.h>
#include "Sqlite3.h"int main(int argc, char* argv[])
{
sqlite3 **ppDb=0;
HINSTANCE hDll=::LoadLibrary("sqlite3.dll");
if(!hDll) return 0;
SQLITE3_OPEN lp=(SQLITE3_OPEN)::GetProcAddress(hDll,"sqlite3_open");
if(!lp) return 0;
(*lp)("dbname",ppDb);
::FreeLibrary(hDll);
return 0;
}

解决方案 »

  1.   

    Loaded 'ntdll.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
    Loaded 'C:\Documents and Settings\natasha\My Documents\VC++6.0\Sqlite3\Debug\sqlite3.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
    First-chance exception in Sqlite3.exe (SQLITE3.DLL): 0xC0000005: Access Violation.
    The program 'C:\DOCUMENTS AND SETTINGS\NATASHA\MY DOCUMENTS\VC++6.0\Sqlite3\Debug\Sqlite3.exe' has exited with code 0 (0x0).
    Loaded 'ntdll.dll', no matching symbolic information found.
    Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
    The program 'C:\DOCUMENTS AND SETTINGS\NATASHA\MY DOCUMENTS\VC++6.0\Sqlite3\Debug\Sqlite3.exe' has exited with code 0 (0x0).提示没有找到匹配的调试符号信息,
    First-chance exception in Sqlite3.exe (SQLITE3.DLL): 0xC0000005: Access Violation.说明你的代码中存在着访问违规的问题,请仔细检查有关访问指针的地方。