WINCE 编译的时候出现错误 illegal indirection
来源:互联网 发布:直销软件定做公司 编辑:程序博客网 时间:2024/05/16 11:31
WINCE 编译的时候出现错误 illegal indirection 看了下面的讨论 觉得有点收获
wit_scuec:
写了一个按键的驱动,在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里面的一些驱动程序,发现每一个驱动程序的头文件不一样,对于我这样的新手,想请教下编写驱动时,头文件的编写应该注意哪些?如何查找需要的头文件?
感谢读帖,感谢指教!
LoongEmbedded:
--->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里面的一些驱动程序,发现每一个驱动程序的头文件不一样,对于我这样的新手,想请教下编写驱动时,头文件的编写应该注意哪些?如何查找需要的头文件?
--->因为不同的驱动用到的函数不一样,所以包含的头文件不一样,驱动自己的头文件一般是用于声明函数,定义结构体,定义宏等本驱动所需要的。
wit_scuec:
MapPtrToProcess函数的返回值的类型是LPVOID,这个我知道,我昨晚把uchar* pReadBuffer改为 LPVOID pReadBuffer; 但是改过之后出现下面的问题:
*pReadBuffer=MapPtrToProcess(pBuffer,GetCallerProcess());
这个语句:
BUILD: [01:0000000022:ERRORE] d:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\Mykey.cpp(511) : error C2100: illegal indirection
*pReadBuffer=0;
这个语句:
BUILD: [01:0000000023:ERRORE] d:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\Mykey.cpp(512) : error C2100: illegal indirection
*pReadBuffer=1;
这个语句:
BUILD: [01:0000000024:ERRORE] d:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\Mykey.cpp(522) : error C2100: illegal indirection
BUILD: [01:0000000025:ERRORE] d:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\Mykey.cpp(522) : error C2440: '=' : cannot convert from 'int' to 'LPVOID'
这个语句:
*pReadBuffer=0;
BUILD: [01:0000000027:ERRORE] d:\WINCE500\PLATFORM\mini2440\Src\Drivers\Mykey\Mykey.cpp(530) : error C2100: illegal indirection
该段程序主要调用等待多事件函数WaitForMultipleObjects()等待事件gReadKeyEvent生效,当gReadKeyEvent[0]有效时,返回1字节,该字节值为1;如果WaitForMultipleObjects()等待的事件是gReadKeyEvent[1](本驱动关闭或卸载),则返回一字节,但该字节的值为0 。
怎样才能编译通过呢?
LoongEmbedded:
DWORD DSK_Read(DWORD Handle, LPVOID pBuffer, DWORD dwNumBytes)
{
DWORD ret;
uchar* pReadBuffer;
if((pBuffer==NULL)||(dwNumBytes<=0))
return 0;
pReadBuffer=MapPtrToProcess(pBuffer,GetCallerProcess());
*pReadBuffer=(LPVOID *)0;
return 0;
}
wit_scuec:
LPVOID MapPtrToProcess(
LPVOID lpv,
HANDLE hProc
);
MapPtrToProcess 返回的是LPVOID,一个没有类型的指针,而程序里面定义的pReadBuffer是uchar*型,编译的时候出现pReadBuffer=MapPtrToProcess(pBuffer,GetCallerProcess());'=' : cannot convert from 'LPVOID' to 'uchar *',的错误,周工的参考代码并没有进行强制类型转换,但是我在PB上编译时候会报错,实际上还是类型不匹配的问题,我将程序做了如下修改 :
pReadBuffer=(uchar*)MapPtrToProcess(pBuffer,GetCallerProcess()); 使得MapPtrToProcess函数的返回值强制为uchar* ,与pReadBuffer定义向匹配。
编译就通过了
原帖地址:http://topic.csdn.net/u/20071127/11/3a729150-d1c8-48ed-8c12-59ba215bf4ea.html
- WINCE 编译的时候出现错误 illegal indirection
- error C2100: illegal indirection
- 编译模块的时候出现的莫名奇怪的错误
- 编译模块的时候出现的莫名奇怪的错误
- android studio 编译的时候出现的错误和解决方法
- maven编译的时候出现一大堆Test相关的错误
- maven编译的时候出现一大堆Test相关的错误
- 编译mysql的时候出现了以下错误。
- gcc在出现错误的时候停止编译 -Wfatal-errors
- 使用ant debug编译的时候出现如下错误
- WINCE编译过程中的错误出现阶段
- WINCE编译过程中的错误出现阶段
- wince 6.0 的编译错误
- wince编译遇到的错误
- 交叉编译工具执行时候出现错误
- C++ error C2100: illegal indirection 问题
- Java 出现“Illegal key size”错误的解决方案
- 编译出现的错误
- AAC ADTS LATM 格式分析
- 禁用goto重头再来
- 吉他→左手(卡雷巴洛左手放松技巧)(引用)
- WINCE 串口驱动相关一些函数分析
- dom4j简单学习
- WINCE 编译的时候出现错误 illegal indirection
- C#中StreamReader读取中文文本出现乱码的解决方法
- ITIL V3 学习
- java 执行cmd命令的方式之一(bat)
- 资产的状态-全生命周期
- 对提高箱琴水平很重要的几张专辑和歌曲
- POJ 1976 A Mini Locomotive (动态规划)
- 安全设置MSSQL的具体步骤
- 安全检测Oracle注入点全过程