我用VC建立了一个常规DLL,里面想封装ADO数据库操作,并在stdAfx.h中加入如下语句
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("LockTypeEnum","adoLockTypeEnum") rename("EOF","adoEOF") rename("DataTypeEnum","adoDataTypeEnum") rename("FieldAttributeEnum","adoFieldAttributeEnum") rename("EditModeEnum","adoEditModeEnum") rename("RecordStatusEnum","adoRecordStatusEnum")rename("ParameterDirectionEnum","adoParameterDirectionEnum")
在InitInstance函数中加入COM初始化函数语句AfxOleInit()初始化COM。但是问题是我写了一个导出函数用语连接数据库在调用
hr = m_pConnection.CreateInstance("ADODB.Connection");
的时候hr返回值就是错误的,为什么呢?我在DLL外面的exe也是这样做的,但是没有出错啊,为什么呢?
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("LockTypeEnum","adoLockTypeEnum") rename("EOF","adoEOF") rename("DataTypeEnum","adoDataTypeEnum") rename("FieldAttributeEnum","adoFieldAttributeEnum") rename("EditModeEnum","adoEditModeEnum") rename("RecordStatusEnum","adoRecordStatusEnum")rename("ParameterDirectionEnum","adoParameterDirectionEnum")
在InitInstance函数中加入COM初始化函数语句AfxOleInit()初始化COM。但是问题是我写了一个导出函数用语连接数据库在调用
hr = m_pConnection.CreateInstance("ADODB.Connection");
的时候hr返回值就是错误的,为什么呢?我在DLL外面的exe也是这样做的,但是没有出错啊,为什么呢?
hr返回是什么?
AFX_MANAGE_STATE(AfxGetStaticModuleState( )) //此语句用来正确地切换MFC模块状态你可以参考一下。
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
_ConnectionPtr m_pConnection;
HRESULT hr;
_bstr_t strConnect;
try
{
hr = m_pConnection.CreateInstance("ADODB.Connection");//create connection object
strConnect = strConnection;
if(SUCCEEDED(hr))
hr= m_pConnection->Open(strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
CString errormessage;
errormessage.Format("ConstructDatabaseConnection Error.");
AfxMessageBox(errormessage);
return FALSE;
}
if(m_pConnection == NULL)
{
MessageBox(NULL, "OK", "Connect success", MB_OK);
return NULL;
}
m_pConnection->Close();
return m_pConnection;
}不行啊,加上AFX_MANAGE_STATE(AfxGetStaticModuleState());后,在_ConnectionPtr m_pConnection;
的时候就抱错了,郁闷!
AFX_MANAGE_STATE(AfxGetStaticModuleState());