客户端文件调用组件的时候出现问题 提示程序出现错误中止 我问同学有的说是数据库调用问题 有的说是定义的IAccount *IAccount; 没有初始化 希望懂MFC和ATL组件编程的朋友帮忙看看 这个是自动取款机的设计代码 小弟在此表示感谢、代码入下 (有想帮忙的朋友加我好友,我把完整代码传给你,您帮我看看 我的 QQ :6169580)
客户端代码:
void CDlgLogin::OnOK()
{ UpdateData(TRUE); HRESULT hr;
IAccount *IAccount; //指向接口的指针// UpdateData(TRUE); BSTR AccountID = A2BSTR(m_sAccount);
BSTR Pswd = A2BSTR(m_sPswd); //hr = CoCreateInstance(CLSID_Account,NULL,CLSCTX_SERVER,IID_IAccount,(void**)&IAccount );
COSERVERINFO srvinfo={0,L"192.168.0.92",NULL,0};
MULTI_QI MultiQI = {&IID_IUnknown,NULL,NOERROR};
hr=CoCreateInstanceEx(CLSID_Account, NULL, CLSCTX_REMOTE_SERVER,
&srvinfo,1, &MultiQI);
if(hr!=0)
AfxMessageBox("COM组件创建失败!");
else
{
BOOL IsAccountValid = FALSE;
hr = IAccount->Login(AccountID,Pswd,&IsAccountValid); // call method
g_IsAccountValid = IsAccountValid;
g_AccountID = m_sAccount;
hr = IAccount->Release(); //释放接口
} CDialog::OnOK();
}调试到
hr = IAccount->Login(AccountID,Pswd,&IsAccountValid); // call method
g_IsAccountValid = IsAccountValid;
g_AccountID = m_sAccount;
hr = IAccount->Release(); //释放接口
就不能运行了 组件部分代码 连接数据库部分
BOOL CAccount::ConnectDBSource(/*BSTR AccountID,BSTR Pswd*/)
{
//-------------连接数据源---------------
try
{
CoInitialize(NULL); // 初始化COM.
m_pConnection.CreateInstance(__uuidof(Connection)); //实例化_ConnectionPtr对象,并调用Open方法
m_pConnection->Open("DSN=BankAccount;", _bstr_t(""), _bstr_t(""),adModeUnknown );
if (NULL== m_pConnection)
{
MessageBox(NULL,_T("连接数据源出错!"),_T("ERROR"),MB_OK);
return FALSE;
}
else
return TRUE;
}
登陆部分:STDMETHODIMP CAccount::Login(BSTR AccountID, BSTR Pswd, BOOL *pIsValid)
{if(ConnectDBSource())
{
//---创建命令----------------------------------------
pCommand.CreateInstance (__uuidof (Command));
pCommand->ActiveConnection = m_pConnection; _bstr_t strSQL ="Select * From Account Where AccountID Like '";
strSQL+=AccountID;
strSQL+="' And Password Like'";
strSQL+=Pswd;
strSQL+="'";
pCommand->CommandText = strSQL ; //拼写查询字串 pRecordset.CreateInstance (__uuidof (Recordset));
pRecordset->CursorLocation = adUseClient;
pRecordset->Open((IDispatch *) pCommand, vtMissing, adOpenStatic, adLockOptimistic, adCmdUnknown);
//----------------------
if(pRecordset->adoEOF) //若未找到则返回FALSE
*pIsValid = FALSE;
else //若找到则返回TRUE
*pIsValid = TRUE;
CoUninitialize(); //中止COM
}
return S_OK;
客户端代码:
void CDlgLogin::OnOK()
{ UpdateData(TRUE); HRESULT hr;
IAccount *IAccount; //指向接口的指针// UpdateData(TRUE); BSTR AccountID = A2BSTR(m_sAccount);
BSTR Pswd = A2BSTR(m_sPswd); //hr = CoCreateInstance(CLSID_Account,NULL,CLSCTX_SERVER,IID_IAccount,(void**)&IAccount );
COSERVERINFO srvinfo={0,L"192.168.0.92",NULL,0};
MULTI_QI MultiQI = {&IID_IUnknown,NULL,NOERROR};
hr=CoCreateInstanceEx(CLSID_Account, NULL, CLSCTX_REMOTE_SERVER,
&srvinfo,1, &MultiQI);
if(hr!=0)
AfxMessageBox("COM组件创建失败!");
else
{
BOOL IsAccountValid = FALSE;
hr = IAccount->Login(AccountID,Pswd,&IsAccountValid); // call method
g_IsAccountValid = IsAccountValid;
g_AccountID = m_sAccount;
hr = IAccount->Release(); //释放接口
} CDialog::OnOK();
}调试到
hr = IAccount->Login(AccountID,Pswd,&IsAccountValid); // call method
g_IsAccountValid = IsAccountValid;
g_AccountID = m_sAccount;
hr = IAccount->Release(); //释放接口
就不能运行了 组件部分代码 连接数据库部分
BOOL CAccount::ConnectDBSource(/*BSTR AccountID,BSTR Pswd*/)
{
//-------------连接数据源---------------
try
{
CoInitialize(NULL); // 初始化COM.
m_pConnection.CreateInstance(__uuidof(Connection)); //实例化_ConnectionPtr对象,并调用Open方法
m_pConnection->Open("DSN=BankAccount;", _bstr_t(""), _bstr_t(""),adModeUnknown );
if (NULL== m_pConnection)
{
MessageBox(NULL,_T("连接数据源出错!"),_T("ERROR"),MB_OK);
return FALSE;
}
else
return TRUE;
}
登陆部分:STDMETHODIMP CAccount::Login(BSTR AccountID, BSTR Pswd, BOOL *pIsValid)
{if(ConnectDBSource())
{
//---创建命令----------------------------------------
pCommand.CreateInstance (__uuidof (Command));
pCommand->ActiveConnection = m_pConnection; _bstr_t strSQL ="Select * From Account Where AccountID Like '";
strSQL+=AccountID;
strSQL+="' And Password Like'";
strSQL+=Pswd;
strSQL+="'";
pCommand->CommandText = strSQL ; //拼写查询字串 pRecordset.CreateInstance (__uuidof (Recordset));
pRecordset->CursorLocation = adUseClient;
pRecordset->Open((IDispatch *) pCommand, vtMissing, adOpenStatic, adLockOptimistic, adCmdUnknown);
//----------------------
if(pRecordset->adoEOF) //若未找到则返回FALSE
*pIsValid = FALSE;
else //若找到则返回TRUE
*pIsValid = TRUE;
CoUninitialize(); //中止COM
}
return S_OK;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货