一个WIN98SE下响应ISA卡中断的程序,VC6下没问题,主要程序如下。
#define ADDRESSPASS CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)//VXD驱动里也是这么定义的
hDevice = CreateFile("\\\\.\\MY784.VXD", 0,0,0,
CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
if (hDevice == INVALID_HANDLE_VALUE)
{
AfxMessageBox("VxD加载失败",MB_OK);
return 0;
}
if (!DeviceIoControl(hDevice, ADDRESSPASS, CallBackAPC, 0, 0, 0, 0, 0))
{
AfxMessageBox("VxD调用失败",MB_OK);
return 0;
}
while(TRUE) SleepEx(INFINITE , TRUE);
return 0;
DWORD CallBackAPC(PVOID param)
{
li++;
return 0;
}用li来计中断响应的次数。不需要其他数据IO。现在改在VB下,如下,
Private Const ADDRESSPASS = &H220007'在VC中查到ADDRESSPASS的值,不知道对不对。
hFile = CreateFile(fname, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED, 0)
If hFile = -1 Then
MsgBox ("VxD驱动加载失败!")
End If
以上没问题。
deviceio = DeviceIoControl(hFile, ADDRESSPASS, InBuff(0), 0, 0, 0, 0, 0)
If deviceio = 0 Then
MsgBox ("VxD调用失败!")
End Ifdeviceio 这里返回一直是0,参数修改试了很多都不行。我只要求响应中断,计数就可以。多谢指教。GETLASTERORR返回78,两位数好像是78。记得不是很清楚了。主要问题1:deviceiocontrol使用,2:响应中断计数 前边的VC程序在VB中怎么作。答对1个马上50分,2个100。麻烦各位高手现身。
#define ADDRESSPASS CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)//VXD驱动里也是这么定义的
hDevice = CreateFile("\\\\.\\MY784.VXD", 0,0,0,
CREATE_NEW, FILE_FLAG_DELETE_ON_CLOSE, 0);
if (hDevice == INVALID_HANDLE_VALUE)
{
AfxMessageBox("VxD加载失败",MB_OK);
return 0;
}
if (!DeviceIoControl(hDevice, ADDRESSPASS, CallBackAPC, 0, 0, 0, 0, 0))
{
AfxMessageBox("VxD调用失败",MB_OK);
return 0;
}
while(TRUE) SleepEx(INFINITE , TRUE);
return 0;
DWORD CallBackAPC(PVOID param)
{
li++;
return 0;
}用li来计中断响应的次数。不需要其他数据IO。现在改在VB下,如下,
Private Const ADDRESSPASS = &H220007'在VC中查到ADDRESSPASS的值,不知道对不对。
hFile = CreateFile(fname, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED, 0)
If hFile = -1 Then
MsgBox ("VxD驱动加载失败!")
End If
以上没问题。
deviceio = DeviceIoControl(hFile, ADDRESSPASS, InBuff(0), 0, 0, 0, 0, 0)
If deviceio = 0 Then
MsgBox ("VxD调用失败!")
End Ifdeviceio 这里返回一直是0,参数修改试了很多都不行。我只要求响应中断,计数就可以。多谢指教。GETLASTERORR返回78,两位数好像是78。记得不是很清楚了。主要问题1:deviceiocontrol使用,2:响应中断计数 前边的VC程序在VB中怎么作。答对1个马上50分,2个100。麻烦各位高手现身。
'在这里看值
static tCount as long tCount=tCount+1
debug.print tCount CallBackAPC=0
end functiondeviceio = DeviceIoControl(hFile, ADDRESSPASS, addressof CallBackAPC, 0, 0, 0, 0, 0)另外,在DeviceIoControl返回后,调用GetLastError,看看到底是什么原因造成的执行失败.
GETLASTERROR返回87请大家再帮忙看看
你DeviceIoControl的声明怎么写的
(ByVal hDevice As Long, _
ByVal dwIoControlCode As Long, _
lpInBuffer As Any, _
ByVal nInBufferSize As Long, _
lpOutBuffer As Any, _
ByVal nOutBufferSize As Long, _
lpBytesReturned As Long, _
lpOverlapped As Long) As Long
Public Function CallBackAPC() As Long
js = js + 1
jst500.Text33.Text = js
End FunctionPrivate Const ADDRESSPASS = &H220007
以上是函数声明和两个相关参数的,请指教,谢谢
dim Inbuff(255) as byte
hFile = CreateFile(fname, GENERIC_WRITE Or GENERIC_READ, _
0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED, 0)
If hFile = -1 Then
MsgBox ( "VxD驱动加载失败! ")
End If
以上没问题。
deviceio = DeviceIoControl(hFile, ADDRESSPASS, InBuff(0), 255, 0, 0, 0, 0)
If deviceio = 0 Then
MsgBox ( "VxD调用失败! ")
End If
还有,你哪个ADDRESSPASS的值要准确,在VC中,是用#define ADDRESSPASS CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)得到的,我不知道 CTL_CODE是什么样的宏命令,所以...
#define ADDRESSPASS CTL_CODE(FILE_DEVICE_UNKNOWN, 1, METHOD_NEITHER, FILE_ANY_ACCESS)//VXD驱动里也是这么定义的 11楼的用法试了,不行。
VC,VXD里都是这么用的。
Private Const ADDRESSPASS = &H220007 ‘在VC中查到ADDRESSPASS的值,综合其他关于CTL_CODE的帖子来看,这个定义应该是没有错的。DeviceIoControl(hFile, ADDRESSPASS, addressof CallBackAPC, 0, 0, 0, 0, 0) 从参数逐个分析,hFile没问题,ADDRESSPASS应该没问题,无论用addressof CallBackAPC还是 INBUFF(0)都应该是对的,但是就是报错,返回错误87。请高手 出马,感谢!!!