写了一个按键的驱动,在PB中进行编译的时候,出现了以下错误:
BUILD: [01:0000000022:ERRORE] d:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\Mykey.cpp(511) : error C2440: '=' : cannot convert from 'LPVOID' to 'uchar *'
BUILD: [01:0000000024:PROGC ] Linking D:\WINCE500\platform\mini2440\lib\ARMV4I\retail\MYKEY.lib
BUILD: [01:0000000033:ERRORE] LINK : fatal error LNK1181: cannot open input file 'obj\ARMV4I\retail\Mykey.obj'
错误C2440指向下面程序:
/*******************************************************************************************
函数名称: Key_Read
描 述: 读取按键状态
输入参数: DWORD Handle : 驱动程序引用事例句柄
LPVOID pBuffer : 接收缓冲区
DWORD dwNumBytes: 要读的字节数
输出参数: 无
返 回: 实际读到字节数
*******************************************************************************************/
DWORD MYK_Read(DWORD Handle,LPVOID pBuffer,DWORD dwNumBytes)
{
DWORD ret;
uchar* pReadBuffer;
if((pBuffer==NULL)||(dwNumBytes<=0))
return 0;
pReadBuffer=MapPtrToProcess(pBuffer,GetCallerProcess());
*pReadBuffer=0;
RETAILMSG(1,(TEXT("***MYK_read[!!!]!!\r\n")));
/* 挂起当前线程,直到 KEY 按键按下或驱动关闭 */
ret=WaitForMultipleObjects(2,gReadKeyEvent,FALSE,INFINITE);
if(ret==WAIT_OBJECT_0)
{
ResetEvent(gReadKeyEvent[0]); //按键按下
*pReadBuffer=1;
return 1;
RETAILMSG(1,(TEXT("ResetEvent(gReadKeyEvent[0])")));
}
else if(ret==(WAIT_OBJECT_0+1))
{
ResetEvent(gReadKeyEvent[1]);
*pReadBuffer=0; //驱动关闭
RETAILMSG(1,(TEXT("ResetEvent(gReadKeyEvent[1])")));
return 1;
}
return 0;
}
有三个问题:
1. 程序参考周工的中断流驱动 ,'=' : cannot convert from 'LPVOID' to 'uchar *',出现这种错误的原因是什么呢?如何修改?
2. error LNK1181: cannot open input file 'obj\ARMV4I\retail\Mykey.obj' 编译为什么没有.obj文件呢?
指定目录D:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\obj\ARMV4I\retail下面只有一个_objects.mac文件,文件内容如下:
OBJECTS= \
obj\ARMV4I\retail\Mykey.obj
PASS0_OBJECTS=
3. 我看了BSP里面的一些驱动程序,发现每一个驱动程序的头文件不一样,对于我这样的新手,想请教下编写驱动时,头文件的编写应该注意哪些?如何查找需要的头文件?
感谢读帖,感谢指教!
------解决方案--------------------
1. 程序参考周工的中断流驱动 ,'=' : cannot convert from 'LPVOID' to 'uchar *',出现这种错误的原因是什么呢?如何修改?
--->511行是指pReadBuffer=MapPtrToProcess(pBuffer,GetCallerProcess());
这一行吧,因为MapPtrToProcess函数的返回值的类型是LPVOID,所以楼主把下面的定义:
uchar* pReadBuffer;
改为
LPVOID pReadBuffer;
2. error LNK1181: cannot open input file 'obj\ARMV4I\retail\Mykey.obj' 编译为什么没有.obj文件呢?
指定目录D:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\obj\ARMV4I\retail下面只有一个_objects.mac文件,文件内容如下:
OBJECTS= \
obj\ARMV4I\retail\Mykey.obj
PASS0_OBJECTS=
---》因为你这个驱动因为编译出错,所以不会生成目标文件,这是正常的,只要编译通过了,就可以生产目标文件了。
3. 我看了BSP里面的一些驱动程序,发现每一个驱动程序的头文件不一样,对于我这样的新手,想请教下编写驱动时,头文件的编写应该注意哪些?如何查找需要的头文件?
--->因为不同的驱动用到的函数不一样,所以包含的头文件不一样,驱动自己的头文件一般是用于声明函数,定义结构体,定义宏等本驱动所需要的。