如何用串口传输bmp文件并显现出来?(基于对话框),急用,大家帮手啊

tangshiping 2004-04-06 09:25:37
写串口的代码我是这么写的,也不知道对不对:

CFile file;
file.Open("e:\\11.bmp",CFile::typeBinary|CFile::modeRead);//二进制方式打开,只能读
#define BUFFERWIDTH 1000
char buf[BUFFERWIDTH];
DWORD dw = 0;
do{
dw = file.Read(buf, BUFFERWIDTH );
//写串口
DWORD iLength;
iLength=40;
WriteFile(hcom,&buf,iLength,&iLength,NULL);
}while(dw==BUFFERWIDTH);
file.Close();
怎么读串口并显示在对话框呢?谢谢大家帮忙啊
...全文
154 点赞 收藏 49
写回复
49 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangshiping 2004-04-08
是的是的,这会彻底好了。谢谢,揭贴送分!!
感谢: ymbymb(毛病大哥) 。
回复
ymbymb 2004-04-08
我的测试文件大概用了25秒就传完了, 可能是发送太快了,你可以把发送的部分改一下
com1.WriteBuf(pBuf, dwFileLen); 可以改成;
char *p = pBuf;
while(dwFileLen > 0)
{
if(dwFileLen > 1024)
{
com1.WriteBuf(p, 1024);
dwFileLen -= 1024;
p += 1024;
}
else
{
com1.WriteBuf(p, dwFileLen);
dwFileLen = 0;
}
Sleep(1);
}
忘了加延时了
回复
ymbymb 2004-04-08
我的测试文件大概用了25秒就传完了, 可能是发送太快了,你可以把发送的部分改一下
com1.WriteBuf(pBuf, dwFileLen); 可以改成;
char *p = pBuf;
while(dwFileLen > 0)
{
if(dwFileLen > 1024)
{
com1.WriteBuf(p, 1024);
dwFileLen -= 1024;
p += 1024;
}
else
{
com1.WriteBuf(p, dwFileLen);
dwFileLen = 0;
}
}
回复
tangshiping 2004-04-08
我试过了,图片大概是超过5k就不行了。可能我的机器有毛病,毛病大哥没有什么还有提醒的话一会就揭贴啊
回复
tangshiping 2004-04-08
果然是文件太大的原因!!!
我找了一个3k的位图,很顺利。可是一个几十k的就很久都没有显示。是不是就是这样啊 ymbymb(毛病大哥) ?你测试的那个图片我就显示不出来。难道我的串口有什么问题?速度也太慢了
非常感谢,问题基本解决了,特别感谢 ymbymb(毛病大哥)
回复
ymbymb 2004-04-08
我发给你的程序,你什么都不要改,两个程序都运行起来后,先按接收,再按发送,你可以先用一个比较小的文件试试,如果还不行那只能是你的串口有问题或者串口线有问题
回复
tangshiping 2004-04-08
我去掉了,只把你原来的程序中的路径改为全路径,别的一概没有改动。(不会路径也不能改吧?)可是我不会跟踪,不好意思,以前是做vb的,现在刚入门vc。
回复
tangshiping 2004-04-08
肯定是2,3交叉的,是根直接连两个本机串口的线,9针的,以前别人用国做串口通信的,应该没有问题
回复
ymbymb 2004-04-08
把你的MessageBox去掉,否则数据会丢失, 如果还不行,你可以跟踪一下,看看两个串口的打开是否正确
回复
tangshiping 2004-04-08
CFile file;
file.Open("temp1.bmp",CFile::modeCreate|CFile::modeReadWrite);
file.Write(pBuf, dwFileLen);
file.Close();
delete[] pBuf;
HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"temp1.bmp", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE);
也改为:
CFile file;
file.Open("e:\\temp1.bmp",CFile::modeCreate|CFile::modeReadWrite);
file.Write(pBuf, dwFileLen);
file.Close();
delete[] pBuf;
HBITMAP hBitmap = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
"e:\\temp1.bmp", IMAGE_BITMAP, 0, 0,
LR_CREATEDIBSECTION | LR_LOADFROMFILE | LR_DEFAULTSIZE);
还是不行

回复
ymbymb 2004-04-08
你的串口线要2和3 交叉的那种
回复
tangshiping 2004-04-08
我先接收,再发送,还是不行啊。
这段代码:
while(!m_bCancel)
{
if(com2.ReadBuf(&aa[len], 1) == 1)
{
len++;
if(len == 4) break;
}
Sleep(1);
DoEvents();
MessageBox("2");//我加的,结果就不停的出现
}
是不是就是这里不跳出导致一直等待啊?
您的具体操作是什么?需要改动哪里啊我?怎么就不行呢?
回复
danielzhu 2004-04-08
学习
回复
ymbymb 2004-04-08
我的程序调试过的, 你要先按接收,再按发送, 你不能发贴,可以重新开个贴
回复
tangshiping 2004-04-08
我等了4分钟,还是没有接受完成。
哪位帮忙顶一下,谢谢,我不能继续发贴了否则
回复
tangshiping 2004-04-08
把接受方结束后,再运行时连接出现错误:
cannot open Debug/RevBmp.exe for writing
重起机器再次连接自然没有问题,大约知道原因,但是说不出在哪里?: ymbymb(毛病大哥)再看看啊
回复
tangshiping 2004-04-08
就是接受方并不在对话框显示位图,我把路径该为全路径了已经。我的操作办法是把两个exe同时执行,两个串口用串口线连接,然后发送,接受。
我在发送和接受的核心程序段首尾各加了messagebox,显示“开始发送”,“发送完成”,“开始接受”,“接受完成”。发送顺利执行,接受方却很久都没有出现”接受完成“,位图自然也没有加载,不知道怎么回事?
回复
ymbymb 2004-04-07
回信没有收到, 把问题贴出来
回复
tangshiping 2004-04-07
同时恭喜 ymbymb(毛病大哥) 升星了,恭喜
回复
tangshiping 2004-04-07
谢谢谢谢,已经收到了,可是我还有一点小问题,给您回信了,请帮我看下。
总之真的是感激不尽了
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告
暂无公告