Одна из интерпретаций вашего вопроса состоит в том, что у вас есть проект с исходным кодом, и вы хотите изменить этот проект, чтобы он использовал ваши собственные версии определенных функций winapi.
Вот решение, которое вы можете реализовать для каждой импортированной функции API. Пример здесь для ShowWindow
:
#define ShowWindow Deleted_Winapi_ShowWindow // prevent windows.h from defining ShowWindow
#include <windows.h>
#undef ShowWindow
namespace HiddenWinapi
{
extern "C"
{
// Do what windows.h does, but hide it inside a namespace.
WINUSERAPI BOOL WINAPI ShowWindow( __in HWND hWnd, __in int nCmdShow);
}
}
// make your own function to be called instead of the API, and delegate to the actual API in the namespace.
BOOL WINAPI ShowWindow(HWND hwnd, int nCmdShow)
{
// ... do stuff ...
// call the original API
return HiddenWinapi::ShowWindow(hwnd, nCmdShow);
}
Чтобы использовать это решение для CreateWindowEx
, вам необходимо указать фактическое имя импортированной функции (например, CreateWindowExW
), поскольку CreateWindowEx
- это просто макрос, который расширяется до CreateWindowExW
или CreateWindowExA
.
Вот решение, которое заменяет макрос вашим собственным, но я думаю, что во всех случаях было бы лучше использовать вышеуказанное решение.
#include <windows.h>
#undef CreateWindowEx
// Note that this is a unicode-only version. If your app mixes A and W versions, see
// the solution below for non-macro APIs.
HWND WINAPI CreateWindowEx(DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName, DWORD dwStyle, int X, int Y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam)
{
// ... do stuff ...
// call the REAL function.
return CreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
}