Home > Software engineering >  How to deal with WinAPI macros overriding some function names?
How to deal with WinAPI macros overriding some function names?

Time:09-18

<windows.h> defines macroses for Ansi and Unicode versions of WinAPI. I have a function named SendMessage in my class library. It works fine until <windows.h> is included before including my library. In this case SendMessage is overrided by the macros and the function name becomes SendMessageA or SendMessageW.

Is it possible to somehow deal with it without changing the name of the function in order to save compatibility with older versions of the library?

CodePudding user response:

The real problem is that WinAPI's function definitions are at the C-preprocessor level, and so you have to write some ugly code to try to coexist with them.

If at all possible, you should rename your codebase's functions so that there is no collision with WinAPI.


Otherwise, you can write code like #undef SendMessage to undefine WinAPI's definition of this function before defining your own function.

If you need to switch between defining your own functions and using WinAPI's function macros, you can also use the #pragma push_macro and #pragma pop_macro functionality to preserve the macro before the undef and restore it afterwards.

  • Related