请教 一设备驱动提供的库的头文件里有一个#define 与MFC系统头文件里的定位重名了怎么办?

ark21 2011-02-20 10:27:28
好像没有表述情况哈?

急啊,知道的解答一下!

具体情况是这样的:

我有一个设备,他提供了一个lib库和一个头文件AdvUNODIO.h,(研华工控机io的)
里面有这样一个定义:#define InvalidParameter (DevErrorCode + 12)

这个InvalidParameter 在我编译的时候发觉已经在这个文件:c:\program files\microsoft sdks\windows\v6.0a\include\GdiplusTypes.h

里面,这样定义过了,
enum Status
{
Ok = 0,
GenericError = 1,
InvalidParameter = 2,

所以报出了这样的错:fatal error C1903: unable to recover from previous error(s); stopping compilation

请问怎么解决?
...全文
190 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
arong1234 2011-02-27
  • 打赏
  • 举报
回复
你使用wrapper后的错误就和开始你说的不是一个问题了。后者是运行时刻错误,是你代码写的不对,这就要看你用库的方式对不对了。要会区别问题的不同[Quote=引用 7 楼 ark21 的回复:]
以上的方法我都用过了。  
1你别在同一个文件里同时直接、间接包含这2个头文件就结了。
 
编译是过了,但还是在DeviceOpen的时候,返回 内存分配错误 。

2、所谓wrapper就是你自己写一套全新的api,这套api调用那个lib里的函数。这样那个lib的.h只在这套api所在的cpp里被包含,就不可能和系统的冲突了

一切正常,但就查看自己提供的API返回的错误代码(当……
[/Quote]
ark21 2011-02-26
  • 打赏
  • 举报
回复
以上的方法我都用过了。  
1你别在同一个文件里同时直接、间接包含这2个头文件就结了。
 
编译是过了,但还是在DeviceOpen的时候,返回 内存分配错误 。

2、所谓wrapper就是你自己写一套全新的api,这套api调用那个lib里的函数。这样那个lib的.h只在这套api所在的cpp里被包含,就不可能和系统的冲突了

一切正常,但就查看自己提供的API返回的错误代码(当然是直接借用原有的错误代码),还是返回内存分配错误的代码!
arong1234 2011-02-22
  • 打赏
  • 举报
回复
所谓wrapper就是你自己写一套全新的api,这套api调用那个lib里的函数。这样那个lib的.h只在这套api所在的cpp里被包含,就不可能和系统的冲突了
ark21 2011-02-21
  • 打赏
  • 举报
回复
不懂什么是wrapper,请教一下。

还有,我今天把引起冲突的头文件以及会用到此头文件的地方全部注释了。 编译能过,可我还是不能打开设备,正是太烦了。 我新建一种工程,简单添加那设备头文件及lib文件后都可以顺利打开,但在我即有的工程里一样的添加这些切打不开设备,返回来的错误代码指示,内存分配错误。。郁闷啊,到底怎么回事啊?

我那么大一个工程,加一小部分代码读取速度,居然解决不了了。烦
  • 打赏
  • 举报
回复
wrapper 不错的注意
arong1234 2011-02-20
  • 打赏
  • 举报
回复
这似乎是唯一的解决办法。lz可能需要使用一个专门的.cpp文件给lib内的函数提供一个wrapper,避免直接使用这种冲突的宏[Quote=引用 2 楼 taodm 的回复:]
你别在同一个文件里同时直接、间接包含这2个头文件就结了。
[/Quote]
taodm 2011-02-20
  • 打赏
  • 举报
回复
你别在同一个文件里同时直接、间接包含这2个头文件就结了。
ark21 2011-02-20
  • 打赏
  • 举报
回复
先谢谢各位了

我试了将lib头文件里的InvalidParameter 改一个名字,比如InvalidParam,
但我在调用库里的函数时,却打不开设备。
而没有更改过的却可以正常打开,我也不确定是不是因为这个引起我打不开设备的。

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧