Dll中连接ACCESS数据库

hhhhzhhhh 2012-03-25 08:57:54
在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.
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijianli9 2012-03-28
  • 打赏
  • 举报
回复
1:第一点初始化com库,
2:不要在dll的initlize中连接库,
3:不要再dllmian中操作库。
oyljerry 2012-03-28
  • 打赏
  • 举报
回复
初始化COM库
AfxOleInit();
hhhhzhhhh 2012-03-26
  • 打赏
  • 举报
回复
还有我不加ADO操作数据库的代码时,调用dll没有错误
LiuYinChina 2012-03-26
  • 打赏
  • 举报
回复
::CoInitalize();
hdg3707 2012-03-25
  • 打赏
  • 举报
回复
你是按DLL格式编写的DLL吗,我把同样封装成DLL,然后再调用这个DLL没问题,只是在调用这个DLL的应用程序里,还得加上AfxOleInit();这句才行.
如果你不是用向导生成的DLL工程,你或者手工加上DLL的格式,或者用向导生成一个DLL程序框架,然后再加上自己的代码
不过,我把ADO操作数据库的函数封装成DLL时,DLL工程设的是动态库,不是静态库

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧