我寫的一個COM組件調用一個rf_card_pro.dll裏的fnReadCardMsg接口,接口調用和返回都正確的,但是在我處理數據*bstrUser = cstrUser.AllocSysString(); 報出:Run-Time Check Failure #2 - Stack around the variable 'Card_id' was corrupted.
軟代碼片斷如下:
STDMETHODIMP CrfcardWapper::fn_rf_ReadCardMsg(INT incom, BSTR* bstrUser)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
try
{
CString cstrUser = _T("");
CString tmpstr;
LPCTSTR lpszModuleName = _T("rf_card_pro.dll");
HINSTANCE hInstLib = AfxLoadLibrary(lpszModuleName);
Pfn_ReadCardMsg *fnReadCardMsg = NULL;
fnReadCardMsg = (Pfn_ReadCardMsg *)GetProcAddress(hInstLib,(LPCSTR)("ReadCardMsg"));
CHAR Card_id[9];
CHAR Card_no[11];
CHAR limit_money[11];
// hard code for the user id and key
int code = fnReadCardMsg(1,"12345678","1234567876578918",Card_id,Card_no,limit_money);
if( code > 0 )
{
// if return code large than 0, the code is the left money
// Card_id, Card_no, left_money
tmpstr = Card_id;
cstrUser.Append(L"");
cstrUser.Append(L"Card_id=");
cstrUser.Append(tmpstr);
cstrUser.Append(L";");
tmpstr = Card_no;
cstrUser.Append(L"Card_no=");
cstrUser.Append(tmpstr);
cstrUser.Append(L";");
tmpstr.Format(L"%d",code);
cstrUser.Append(L"Left_money=");
cstrUser.Append(tmpstr);
}
*bstrUser = cstrUser.AllocSysString(); // 報錯的地方
}
catch(CException* ex)
{
ex->Delete();
}
return S_OK;
}
軟代碼片斷如下:
STDMETHODIMP CrfcardWapper::fn_rf_ReadCardMsg(INT incom, BSTR* bstrUser)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
try
{
CString cstrUser = _T("");
CString tmpstr;
LPCTSTR lpszModuleName = _T("rf_card_pro.dll");
HINSTANCE hInstLib = AfxLoadLibrary(lpszModuleName);
Pfn_ReadCardMsg *fnReadCardMsg = NULL;
fnReadCardMsg = (Pfn_ReadCardMsg *)GetProcAddress(hInstLib,(LPCSTR)("ReadCardMsg"));
CHAR Card_id[9];
CHAR Card_no[11];
CHAR limit_money[11];
// hard code for the user id and key
int code = fnReadCardMsg(1,"12345678","1234567876578918",Card_id,Card_no,limit_money);
if( code > 0 )
{
// if return code large than 0, the code is the left money
// Card_id, Card_no, left_money
tmpstr = Card_id;
cstrUser.Append(L"");
cstrUser.Append(L"Card_id=");
cstrUser.Append(tmpstr);
cstrUser.Append(L";");
tmpstr = Card_no;
cstrUser.Append(L"Card_no=");
cstrUser.Append(tmpstr);
cstrUser.Append(L";");
tmpstr.Format(L"%d",code);
cstrUser.Append(L"Left_money=");
cstrUser.Append(tmpstr);
}
*bstrUser = cstrUser.AllocSysString(); // 報錯的地方
}
catch(CException* ex)
{
ex->Delete();
}
return S_OK;
}
解决方案 »
- MFC画图板
- [原创&交流]游戏杆编程心得
- 多文档 窗口菜单中自动增加"隐藏"菜单项,无法删除。怎么办
- ……stdafx.cpp(0): fatal error C1033: cannot open program database '……debug\vc60.pdb'
- 百分请教:keybd_event问题
- 与数据库连接前,我用AfxOleInit()进行初始化,可是运行时提示出错,请问各位是哪里错了呢?谢谢
- VC与SQLSERVER2000的数据接口问题:
- 大家讨论一下:纯软件的语音通讯(经压缩和解压的)能做到什么程度?UP者有分
- 怎么判断一个CRgn是由两个不重叠的CRgn构成的,也就是说怎么判断某个区域是否包含两个不相邻的区域块?
- vc 小问题
- 对话框上不能显示按钮
- 关于界面分割
調試CString的cstrUser的數據為Card_id=3000144803;Card_no=00000051;Left_money=11932,具體如下:- cstrUser "Card_id=3000144803;Card_no=00000051;Left_money=11932" ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > >
- ATL::CSimpleStringT<wchar_t,1> "Card_id=3000144803;Card_no=00000051;Left_money=11932" ATL::CSimpleStringT<wchar_t,1>
- m_pszData 0x03aebe68 "Card_id=3000144803;Card_no=00000051;Left_money=11932" wchar_t *