drive
驱动牛犊
驱动牛犊
  • 注册日期2005-02-01
  • 最后登录2005-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1564回复:8

debug出现错误

楼主#
更多 发布于:2005-03-08 13:09
我的程序每次debug到下面代码时,就会提示说指令引用的内存不能为write.但事实上我的outBuffer指向的一个数组的起始地址,应该不存在指针错误。
bResult = DeviceIoControl (hOutDevice,
                           IOCTL_EZUSB_BULK_WRITE,
                           &OutBulkControl,
                           sizeof(BULK_TRANSFER_CONTROL),
                           outBuffer,
                           OutPacketSize,
                           0,
                           NULL);
大侠们帮忙看一下,可能是什么原因导致的?
谢谢!
idaxsy
驱动大牛
驱动大牛
  • 注册日期2004-12-09
  • 最后登录2006-03-17
  • 粉丝0
  • 关注0
  • 积分386分
  • 威望54点
  • 贡献值0点
  • 好评度8点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-03-08 13:24
要把上下文贴出来才行。
[b]万水千山总是情,回个帖子行不行?[/b]
drive
驱动牛犊
驱动牛犊
  • 注册日期2005-02-01
  • 最后登录2005-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-03-08 13:57
要把上下文贴出来才行。


UINT  WriteProc(
   LPVOID
)
{
  BOOLEAN bResult;
  short outBuffer[512];
  ULONG OutPacketSize;

  if (WriteLength()>=MAX_BUFFER_SIZE)
  {
    OutPacketSize=MAX_BUFFER_SIZE;
  }
  else
  {
    OutPacketSize=WriteLength();
  }

  WriteCompleteEvent=CreateEvent(0,FALSE,FALSE,NULL);

  BULK_TRANSFER_CONTROL   OutBulkControl;

  if (bOpenDriver (&hOutDevice) != TRUE)
  {
    AfxMessageBox(\"Failed to open the device\",MB_OK);
    hOutDevice = NULL;
  }

  OutBulkControl.pipeNum=0;
  if (hOutDevice != NULL)
  {
    for (int i=0;i<OutPacketSize;i++)
     outBuffer = WriteDeQueue ();
      bResult=DeviceIoControl(hOutDevice,                                         IOCTL_EZUSB_BULK_WRITE,
&OutBulkControl,
sizeof(BULK_TRANSFER_CONTROL),
outBuffer,
OutPacketSize,
0,
NULL);

      if (WriteCompleteEvent)
        SetEvent(WriteCompleteEvent);
      suswrite=1;
  CloseHandle(hOutDevice);
  }
return bResult;
}

上面是辅助线程函数,下面是主程序:
CWinThread* myWriteThread = AfxBeginThread  (WriteProc,NULL,THREAD_PRIORITY_HIGHEST,0,0,NULL);

每次debug运行到DeviceIoControl()时就会提示指令引用的内存不能为write?.

ddp大家帮帮忙,这程序到底错在哪里?
我自己是怎么了看不出来了。


[编辑 -  3/8/05 by  drive]

[编辑 -  3/8/05 by  drive]

[编辑 -  3/8/05 by  drive]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2005-03-08 15:48
outBuffer = WriteDeQueue ();
返回什么东西??
你改变了指针,谁知道outBuffer是多少???
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地下室#
发布于:2005-03-08 15:50
for (int i=0;i<OutPacketSize;i++)
outBuffer [] = WriteDeQueue ();
可能还好理解点.....


[编辑 -  3/8/05 by  wowocock]
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
drive
驱动牛犊
驱动牛犊
  • 注册日期2005-02-01
  • 最后登录2005-05-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-08 18:22
哦,这是我在把程序贴过来的时候误删了。
我的程序是for (int i=0;i<OutPacketSize;i++)
          outBuffer(i) = WriteDeQueue ();
其中的outBuffer(i)其实是方括号,奇怪用方括号就显示不出来了。

[编辑 -  3/8/05 by  drive]
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-09 09:46
bResult = DeviceIoControl (hOutDevice,
IOCTL_EZUSB_BULK_WRITE,
&OutBulkControl,
sizeof(BULK_TRANSFER_CONTROL),
outBuffer,
OutPacketSize,
&RetVal,
NULL);
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
xbzjackey
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望34点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-03-09 11:08
函数调用不对,应该如下:
bResult = DeviceIoControl (hOutDevice,
IOCTL_EZUSB_BULK_WRITE,
&OutBulkControl,
sizeof(BULK_TRANSFER_CONTROL),
outBuffer,
&OutPacketSize,  //应该传送地址
0,
NULL);

回答好的不要忘了给分哦。。。
xbzjackey
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望34点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-03-09 11:12
不好意思,上面的发错了,应该如下:
bResult = DeviceIoControl (hOutDevice,
IOCTL_EZUSB_BULK_WRITE,
&OutBulkControl,
sizeof(BULK_TRANSFER_CONTROL),
outBuffer,
OutPacketSize,
&OutPacketSize,//该参数不能为空
NULL);
回答好的不要忘了给分哦。。。
游客

返回顶部