首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

Dll中连接ACCESS数据库,该怎么解决

2012-04-22 
Dll中连接ACCESS数据库在Dll写连接数据库的语句,编译正确#pragma warning(disable:4146)#import C:/Progr

Dll中连接ACCESS数据库
在Dll写连接数据库的语句,编译正确
#pragma warning(disable:4146)
#import "C:/Program Files/Common Files/System/ADO/msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")
#pragma warning(default:4146)
using namespace ADODB;

  _ConnectionPtr m_pConnection;
_RecordsetPtr m_pRecordset;

AfxOleInit();

m_pConnection.CreateInstance(__uuidof(Connection));
try  

// 打开本地Access库Demo.mdb 
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Db1.mdb","","",adModeUnknown); 

catch(_com_error *e) 

AfxMessageBox(e->ErrorMessage()); 

运行调用dll的exe报错
Debug error!
Program: ...式\dll\regulardllCall\Debug\regulardllCall.exe
abnormal program termination
(Press Retry to debug the application)

在源代码中调试报错
Unhandled exception in regulardllCall.exe (KERNEL32.DLL):0xE06D7363:Microsoft C++ Exception.

[解决办法]
你是按DLL格式编写的DLL吗,我把同样封装成DLL,然后再调用这个DLL没问题,只是在调用这个DLL的应用程序里,还得加上AfxOleInit();这句才行.
如果你不是用向导生成的DLL工程,你或者手工加上DLL的格式,或者用向导生成一个DLL程序框架,然后再加上自己的代码
不过,我把ADO操作数据库的函数封装成DLL时,DLL工程设的是动态库,不是静态库
[解决办法]
::CoInitalize();
[解决办法]
初始化COM库
AfxOleInit();
[解决办法]
1:第一点初始化com库,
2:不要在dll的initlize中连接库,
3:不要再dllmian中操作库。

热点排行