chen_zhi_heng
忧灵
2015-04-07 11:50
采纳率: 84.6%
浏览 2.4k

C++API函数的重定义。编译无法通过的问题。

在一个生成dll的C++工程,头文件Local.h中,有如下代码:

 DLL IMPORT WORD WINAPI PrintScreen(HWND,WORD,WORD,WORD,LPSTR,BOOL)

在c文件中也是调用的这个6各参数的函数。但是编译的时候,由于在系统API:winuser.h中,有一个3各参数的同名函数,PrintScreen,导致编译提示重定义。无法编译通过。
我想问一下,在本地中定义的这种跟系统api同名的函数,算是对系统函数的重写吗?调用的时候是怎么样的?我如何才能编译通过?
另:VS6.0同样的情况不会报错,VS2012就会报错。应该如何处理?
感谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

6条回答 默认 最新

  • oyljerry
    oyljerry 2015-04-07 14:01
    已采纳

    不要跟系统取同样的名称,不然容易冲突,也会出现莫名其妙的错误。
    最好是取自己的名字,然后加名字空间来区分。

    点赞 评论
  • lihao_ningxia
    上海老李 2015-04-07 12:01

    换名称,前边加些前缀,比如myPrintScreen,更复杂点就用namespace

    点赞 评论
  • caozhy

    没办法重写API中的函数,如果你非要用一样的名字,可以用namespace区分

    点赞 评论
  • zhj2131
    林中朽木 2015-04-09 03:49

    C++重写概念是针对类的机制,重写的条件之一有:继承关系
    Win32 API函数不支持重写

    点赞 评论
  • tangjingyunshiweifen
    IT_Stack 2015-04-09 05:21

    lihao_ningxia 我的方法和lihao_ningxia 一样 在使用自定义的函数是加上其他的比如Myxxxxx或者返回类型 Vd_xxxxx It_xxxxx

    点赞 评论
  • huaipoyang
    怀坡 2015-04-09 08:11

    1.换名称。
    2.把函数放到类里面。
    3.用命名空间(namespace).

    点赞 评论

相关推荐