读取字符串的字符时失误
读取字符串的字符时出错
这是dll导出函数:
在 extern "C" DALHELPER_API _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL)
这里断点,执行到这里时局部变量bstrSQL 读取字符串的字符时出错>(47288888) 类型_bstr_t
应用程序代码:
求教老鸟们!
------解决方案--------------------
用lib吧,不要用dll
extern "C"?_RecordsetPtr&?_bstr_t?
------解决方案--------------------
把 _RecordsetPtr转换成字符串数组等类型,然后再return
这是dll导出函数:
extern "C" DALHELPER_API _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
// 创建记录集对象
m_pRecordSet.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordSet->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error &e) //_com_error这是一种数据类型.就好比int,char这类的数据类型一样,&e是表示是这种类型的引用.
{
// 显示错误信息
MessageBox(NULL,e.Description(),_T("错误提示"),0); //非MFC工程不能用AfxMessageBox
}
// 返回记录集
return m_pRecordSet;
}
在 extern "C" DALHELPER_API _RecordsetPtr& GetRecordSet(_bstr_t bstrSQL)
这里断点,执行到这里时局部变量bstrSQL 读取字符串的字符时出错>(47288888) 类型_bstr_t
应用程序代码:
void CSysLoginDlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
CHotelManageApp* pApp = (CHotelManageApp*)AfxGetApp();
UpdateData(true);
_bstr_t m_btSQL;
HINSTANCE hDll; //DLL句柄
hDll = LoadLibrary(_T("DalHelper.dll"));
if (NULL==hDll)
{
MessageBox(_T("DLL加载失败"));
}
typedef _RecordsetPtr (*peDalHelper)(_bstr_t);
peDalHelper pGetRecordSet; //函数指针
pGetRecordSet = (peDalHelper)GetProcAddress(hDll,"GetRecordSet");
if (pGetRecordSet != NULL)
{
m_btSQL = "select * from tbUser WHERE UserName = '" + (_bstr_t)m_login_username + "'" ;
_RecordsetPtr m_pRecordSet = pGetRecordSet(m_btSQL);
if(m_pRecordSet->adoEOF)
{
AfxMessageBox(L"帐号错误!");
}
else
{
if(m_pRecordSet->Fields->GetItem("UserPassWord")->Value != m_login_password)
{
AfxMessageBox(L"密码错误!");
}
else
{
pApp->m_bSuccessLogin = true;
CDialogEx::OnOK();
}
}
}
}
求教老鸟们!
------解决方案--------------------
用lib吧,不要用dll
extern "C"?_RecordsetPtr&?_bstr_t?
------解决方案--------------------
把 _RecordsetPtr转换成字符串数组等类型,然后再return