writefile()函数具体应用的例子有吗?

lilyy 2003-09-18 10:18:06
我用wtrtefile()函数时,返回值总是0,我估计参数设置有问题,可是没用过,有不知道怎么修改,大家帮忙看看。或者有这方面的例子应用也可以
.......
HANDLE hCom;
unsigned char data_ptr;
unsigned int BytesWrite;
OVERLAPPED m_OverlappedWrite;

ReadFile(hCom, &data_ptr, 1,&BytesRead, &m_OverlappedRead ) ;
大家说为什么返回是0呢?还有第三个参数可以是1吗?
不好最好还是有个例子了
...全文
240 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lilyy 2003-09-26
  • 打赏
  • 举报
回复
我写的发送程序为:
extern unsigned char pc_send(char ch) //send function
{
OVERLAPPED overlappedresult;
DWORD Length,BytesWrite,dwErrorFlags;
DWORD CommSate;

BOOL WSuccess;
char data_ptr;
OVERLAPPED m_OverlappedWrite={0};
m_OverlappedWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);

ClearCommError(hCom,&dwErrorFlags,&CommSate);
// Attempt a asynchronous write operation
WSuccess = WriteFile(hCom, &data_ptr, 1, &BytesWrite,&m_OverlappedWrite );


if (!WSuccess)
{
if(GetLastError()==ERROR_IO_PENDING) //overlapped is operating
GetOverlappedResult(hCom,&overlappedresult, &Length,TRUE);
else
Length=0;
}
else
data_ptr=ch;
return data_ptr;
}
这里BytesWrite总为0,要是改为同步就能为1,中间肯定错了,就是不知道哪错了
lilyy 2003-09-26
  • 打赏
  • 举报
回复
那能大致的说明一下吗?我看资料都看的迷迷糊糊的,谢谢你了:)
everandforever 2003-09-25
  • 打赏
  • 举报
回复
就是改成同步啊.
异步重叠操作,我只在做完成端口应用时用到了.一下子也说不清, MSDN 上 OVERLAPPED IO 好长一段呢.
lilyy 2003-09-25
  • 打赏
  • 举报
回复
那怎么修改啊?能不能详细说来?
everandforever 2003-09-24
  • 打赏
  • 举报
回复
同步是等到读完才返回,它当然知道自己读了多少.
如果它还没开始读就返回了, 它怎么知道可以读到多少呢?
lilyy 2003-09-24
  • 打赏
  • 举报
回复
可是为什么我用同步通信时就对了?
读一个字节就返回1,改用异步就错了
everandforever 2003-09-21
  • 打赏
  • 举报
回复
ReadFile(hCom, &data_ptr, 1,&BytesRead, &m_OverlappedRead ) ;

你一次只读一个字节啊??
你如果要READFILE 是 Overlapped 的, 那么BYTESREAD得等到READFILE真正完成时才能确定啊, 在此处返回 0 就是很正常的事情了.

这种问题到 VC 版去问嘛.
lilyy 2003-09-19
  • 打赏
  • 举报
回复
主要是最后一个参数,我想采用异步通信啊,怎么能用NULL呢
softwarrior 2003-09-18
  • 打赏
  • 举报
回复
lilyy 2003-09-18
  • 打赏
  • 举报
回复
第二个参数是读缓冲区啊,第三个参数是要求读入的字节数啊,可以这么用吗?你试了吗?
我估计不行
softwarrior 2003-09-18
  • 打赏
  • 举报
回复
这个成吗? 可以用的

BOOL CExportDlg::WriteToFile(CString strWrite)
{
DWORD dwBytesWrite;

if ( WriteFile(m_hFileWrite, strWrite, strWrite.GetLength(), &dwBytesWrite, NULL))
{
return TRUE;
}
return FALSE;
}
lilyy 2003-09-18
  • 打赏
  • 举报
回复
我想进行异步通信,所以就没把最后一个参数设为NULL
第三个参数我看书上说的是要求读入的字节数啊,不过你要是有实际应用的例子就好了
softwarrior 2003-09-18
  • 打赏
  • 举报
回复
对了,最后一个参数可以是NULL
softwarrior 2003-09-18
  • 打赏
  • 举报
回复
第三个参数应当是第二个参数所指向的缓冲区的长度
具体的错误原因你可以调用GetLastError函数看看
lilyy 2003-09-18
  • 打赏
  • 举报
回复
我试了,不对

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧