向DLL中传递一个SQL语句的时候乱码

DalHelper.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;
 }


exe项目中调用这个函数:

void CSysLoginDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	CHotelManageApp* pApp = (CHotelManageApp*)AfxGetApp();
	UpdateData(true);
	CString m_btSQL;	
	HINSTANCE hDll; //DLL句柄
	hDll = LoadLibrary(_T("DalHelper.dll"));
	if (NULL==hDll)
	{
	MessageBox(_T("DLL加载失败"));
	}

	typedef _RecordsetPtr (*peDalHelper)(_bstr_t btSQL);
	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(_bstr_t(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;
				FreeLibrary(hDll);
		        CDialogEx::OnOK();
			 }
			
		  }
	  }
	FreeLibrary(hDll);
}


调试的时候发现传到dll里的bstrSQL要么空,要么是一串乱码。只要执行到GetRecordSet(_bstr_t bstrSQL)导致程序崩溃。

 

求助各位路过的大虾们怎么解决啊??

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值