我正在使用Visual C ++ 6.0构build一些古老的代码库。 我需要调用AllowSetForegroundWindow()
但是它正在构build的平台SDK没有定义这个函数(我猜这是2000年之前的一些PSDK)。
更新PSDK到一个包含AllowSetForegroundWindow()
似乎不是一个选项,因为Microsoft不再提供对Visual C ++ 6.0的支持,并且SDK不能在线(甚至从购买光盘,我试过)。
我的问题是,我是否可以在VS2010中编写一个包含AllowSetForegroundWindow()
调用的静态库,并与VSC ++ 6.0项目链接,并通过该库调用该调用。
或者有没有人有一个更好的主意,我可以如何解决这个问题一般? 谢谢。
您可以使用GetProcAddress()
在运行时将包装函数连接到实际的函数:
BOOL WINAPI defaultAllowSetForegroundWindow( DWORD dwProcessId) { SetLastError(ERROR_NOT_SUPPORTED); return 0; } BOOL WINAPI shimAllowSetForegroundWindow( DWORD dwProcessId) { static BOOL (WINAPI *asfw)(DWORD) = 0; if (!asfw) { HMODULE user32 = LoadLibraryW(L"USER32"); if (user32) { asfw = (BOOL (WINAPI *)(DWORD)) GetProcAddress( user32, "AllowSetForegroundWindow"); } if (!asfw) { asfw = defaultAllowSetForegroundWindow; } } return (*asfw)(dwProcessId); }
你的代码可以调用shimAllowSetForegroundWindow()
,它将转发给真实的API(或者默认情况下,在不支持该API的平台上会优雅地失败)。
您可能需要根据您的需求进行自定义,以进行错误处理或线程安全。