maoyanIII
驱动牛犊
驱动牛犊
  • 注册日期2003-10-28
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望14点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:1870回复:8

驱动与应用的通信问题

楼主#
更多 发布于:2004-03-05 09:30
在做流驱动十时,如果在IST中已经将数据取得,能不能通过消息机制将消息发送给上层应用(EVC中开发的),然后再由应用程序调用XXX_READ将数据读入,而不是由应用程序通过查询方式读数。
我试了一下,发送的消息上层怎么也收不到。(消息是使用系统内部的,不是我定义的)。我是通过deviceiocontrol将窗口句柄传给驱动dll,在IST中调用postmessage,上层却收不到,使用群发也不行。
报告invalid handle.
请大虾帮忙。

[编辑 -  3/5/04 by  maoyanIII]
aaab01
驱动牛犊
驱动牛犊
  • 注册日期2002-03-12
  • 最后登录2008-07-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-03-06 08:59
不要用消息,用回调函数吧。
ndisworker
驱动牛犊
驱动牛犊
  • 注册日期2002-10-19
  • 最后登录2012-03-31
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-03-31 00:37
Use event plus file mapping.
bakerj
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2005-08-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-03-31 06:58
aaab01 : 能给出一个回调函数的例子么? 驱动里面可以使用应用程序的内存,但是能调用应用程序的回调函数么?
programming is game
bakerj
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2005-08-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-03-31 06:58
ndisworker :

file mapping, 共享内存?
programming is game
maoyanIII
驱动牛犊
驱动牛犊
  • 注册日期2003-10-28
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望14点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-06 14:06
我试了用回调函数,怎么会发生exception?是不是在PB下回调EVC中的函数不行?
maoyanIII
驱动牛犊
驱动牛犊
  • 注册日期2003-10-28
  • 最后登录2008-01-10
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望14点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-06 14:07
file mapping,是什么意思?上面那位大虾给我们解释一下吧.
bakerj
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2005-08-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-08 04:09
我试过了,用共享内存是可以的。

hNFileMap = CreateFileMapping (INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE,
0, 256, IPC_MEM_NAME);
if (hNFileMap != NULL )
{
//pBuffer = (TCHAR *)MapViewOfFile (hNFileMap, FILE_MAP_WRITE, 0, 0, 0);
pBuffer = (TCHAR *)MapViewOfFile (hNFileMap, FILE_MAP_WRITE, 0, 0, 0);
if(pBuffer==NULL)
{
MessageBox(NULL,L"Can not map driver buffer", L"Device Handle", MB_OK );
}
return TRUE;
}
programming is game
bakerj
驱动牛犊
驱动牛犊
  • 注册日期2004-02-26
  • 最后登录2005-08-27
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-08 04:10
估计直接的回调函数是不能工作的,因为代码不在一个进程里面,回调函数必须使用mapprocesspoint才能访问应用程序自己的内存!
programming is game
游客

返回顶部