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中操作库。