• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

又是一个函数问题

chuting1 2010-05-04 05:09:20
定义写函数
extern "C" __int16 __stdcall writecard(int icDev,UCHAR *cardNo)
{
if(icDev!=514) return error_comp; //错误厂商

CString strfirst,strfun,strprice,stramount,strmoney;
UCHAR buf[128];
UCHAR a;


a=cardNo[0]*16+cardNo[1];
buf[0]=a;
a=cardNo[2]*16+cardNo[3];
buf[1]=a;
a=cardNo[4]*16+cardNo[5];
buf[2]=a;
a=cardNo[6]*16+cardNo[7];
buf[3]=a;
swr_24c01a(0,0,4,buf);

return 0;
}


编辑未报错,调试报access violation

UpdateData(true);
int ret=writecard(514,(UCHAR *)m_cardsn.GetBuffer(0));
if(ret!=0)
{
AfxMessageBox("写卡失败");
}

m_cardsn为cstring类型
...全文
115 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
chuting1 2010-05-05
谢谢各位,是我的cardsn转化过程中出的错,长度不等于8了
回复
Eleven 2010-05-05
lz的这个函数writecard(int icDev,UCHAR *cardNo),最好加个参数,指明UCHAR[]的长度
__int16 __stdcall writecard(int icDev,UCHAR *cardNo, int len);
回复
chuting1 2010-05-05
m_cardsn.GetBuffer(0) 没有开辟内存空间,writecard直接操作这些内存肯定报错。

???如何开辟存在空间
回复
chuting1 2010-05-05
这是细节问题,以后会加判断的.m_cardsn长度是等于8的
回复
jyh_baoding 2010-05-05
是的,上面说的有道理
回复
快乐鹦鹉 2010-05-05
[Quote=引用 7 楼 chuting 的回复:]
m_cardsn是从窗体上UpdateData(true)得到的,不会超过8
[/Quote]
那可能少于8个啊,你必须不少于8个
回复
chuting1 2010-05-05
m_cardsn是从窗体上UpdateData(true)得到的,不会超过8
回复
cnzdgs 2010-05-04
1、要检查m_cardsn的长度及内容是否符合要求;
2、GetBuffer用完后需要ReleaseBuffer,对于读取操作最好不要用GetBuffer,可以把参数定义为const char*类型,直接传CString变量。
3、从你的代码来看,貌似是输入卡号,经过处理后传给另一函数。需要注意,输入的内容是字符串而不是数值,如果要使用数值则需要转换一下,0~9这10个数字对应的字符值是0x30~0x39,字符值减去0x30就是对应的数值。
回复
向立天 2010-05-04
m_cardsn有内容么?
不要用GetBuff
直接传m_cardsn试一下
或者声明一个UCHAR数组然后把字符串拷过去
回复
尹成 2010-05-04
楼上正解,要给m_cardsn.GetBuffer(0)开辟一段空间
回复
aa3000 2010-05-04
m_cardsn.GetBuffer(0) 没有开辟内存空间,writecard直接操作这些内存肯定报错。

也不确保m_cardsn开辟的空间足够供writecard操作
回复
13880079673 2010-05-04
(UCHAR *)m_cardsn.GetBuffer(0)
改成,(UCHAR *)(LPCTSTR)m_cardsn 看看
回复
快乐鹦鹉 2010-05-04
你这个函数很容易出问题啊。安全检查都没有。指针直接就拿来用了。你应该先判断cardNo是否为空,然后其长度是否为8,否则很容易爆掉。
或者int ret=writecard(514,(UCHAR *)m_cardsn.GetBuffer(0));之前判断m_cardsn串的长度不小于8
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2010-05-04 05:09
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……